【问题标题】:Parsing JObject properly正确解析 JObject
【发布时间】:2021-12-15 06:42:53
【问题描述】:

我想解析下面的json

{
  "status": 1,
  "data": {
  
    "xyz": [
      [
        3.5927680391473826,
        0.5641835941824296,
        -0.88546609584117
      ],
      [
        3.5885032091080853,
        0.7537851201209402,
        -0.9748245317650808
      ]
    ],
    "xy": [
      [
        479,
        32
      ],
      [
        435,
        85
      ]
    ]
  }
}

我正在使用下面的代码来做到这一点,

resultantData = JObject.Parse(inputString)
List<float> xyz = resultantData["data"]["xyz"].Value<List<List<float>>>();
List<int> xy = resultantData["data"]["xy"].Value<List<int>>();

很遗憾,上述代码无法正确解析 JSON。我错过了什么?

【问题讨论】:

  • 确切的错误或问题是什么?我的猜测是您需要List&lt;List&lt;float&gt;&gt; three_d_pt,而另一个也应该是列表列表。
  • 它不会抛出任何错误。它只是停止工作。由于我使用 unity ,所以很难调试

标签: c# json parsing


【解决方案1】:

我认为你可以使用 JsonConvert.DeserializeObject 来做到这一点

var result = JsonConvert.DeserializeObject<Root>(inputString);

public partial class Root
{
    [JsonProperty("status")]
    public long Status { get; set; }

    [JsonProperty("data")]
    public Data Data { get; set; }
}

public partial class Data
{
    [JsonProperty("xyz")]
    public List<List<double>> Xyz { get; set; }

    [JsonProperty("xy")]
    public List<List<long>> Xy { get; set; }
}

【讨论】:

  • 如果数据是可选的呢?
【解决方案2】:

你有列表列表,而不仅仅是列表

List<List<float>> xyz = resultantData["data"]["xyz"].ToObject<List<List<float>>>();
List<List<int>> xy = resultantData["data"]["xy"].ToObject<List<List<int>>>();

你可以这样使用它

if (xyz != null && xyz.Count > 0)
{ 
    List<float> xyz1 = xyz[0];
}

如果你想把所有东西都放在一堆,我认为这不是一个好主意,你必须试试这个

List<float> xyz = resultantData["data"]["xyz"].ToObject<List<List<float>>>()
.SelectMany(i=> i).ToList();
List<int> xy = resultantData["data"]["xy"].ToObject<List<List<int>>>()
.SelectMany(i=> i).ToList();

【讨论】:

  • 应该加倍吗?
  • 由你决定,我不知道你需要在Unity中使用什么类型。您可以毫无问题地将其更改为双精度或小数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
相关资源
最近更新 更多