【问题标题】:How to get value of JArray dictionary by key如何按键获取JArray字典的值
【发布时间】:2018-07-03 12:50:34
【问题描述】:

我有这个 json 字符串:

[
   [
      {
         "Antibiotic after diagnosis":[
            "Azithromycin",
            "Ciprofloxacin HCl",
            "Ampicillin Sodium"
         ],
         "City":[
            "Tel Aviv",
            "Jerusalem"
         ]
      }
   ],
   [
      {
         "Antibiotic after diagnosis":"Azithromycin",
         "City":"Tel Aviv"
      },
      {
         "Antibiotic after diagnosis":"Ciprofloxacin HCl",
         "City":"Jerusalem"
      }
   ]
]

我反序列化了这个字符串:

data = Newtonsoft.Json.JsonConvert.DeserializeObject<List<object>>("*json str*");
JParameters = data[0] as JArray;
Debug.Log(JParameters["Antibiotic after diagnosis"]);

但是当我运行代码时,它在线崩溃 (Debug.Log(JParameters["Antibiotic after diagnostic"]);) 并出现以下错误:

“ArgumentException:使用无效键值访问的 JArray 值:“诊断后的抗生素”。需要 Int32 数组索引。”

【问题讨论】:

  • JParameters = data[0] as JArray; -> 你有一个数组。 “诊断后的抗生素”是该数组中每个项目的属性,而不是数组的属性(数组本身不能具有属性),因此会出现错误。
  • 你想收到什么? “诊断后抗生素”对每个对象的价值还是只是第一个?
  • @razerez 取决于你想要的结果......
  • 仔细看,json 是一个包含 2 个参数的列表,第一个是列表字典,第二个是字典列表我想获取数据中第一项的值[0]->“诊断后抗生素”即“阿奇霉素”
  • JParameters[0]["Antibiotic after diagnostic"] 就是你想要的。你在数组中有另一个数组

标签: c# unity3d mono virtual-reality


【解决方案1】:

JParameters 的索引应该是一个整数,因为错误状态。你要的是:
JParameters[0]["Antibiotic after diagnosis"]

上面的代码选择第一个元素,然后选择字典键“Antibiotic after diagnostic”的值。

我建议阅读w3schools JSON 以正确理解 JSON 的工作原理。

【讨论】:

  • 不需要不友好,特别是如果你的答案也错了。 JParameters = data[0] as JArray 因此已经是最外层列表的第一个元素。
  • @derpirscher 我已标记您的评论。 Aaron 的回答是中立的,不是不友好的。但是,您自己评论的语气不友好。
  • @derpirscher 我明白你的意思。我按原样测试了上面的 JSON 数组,没有考虑data[0] 行。我已经更新了我的答案
  • @john 就我个人而言,我读了一个答案,比如“阅读 x 以正确理解 y 的工作原理”,而没有指出具体错误为“你太笨了,所以我不会花时间解释它“为什么我的评论不友好?它至少和 Aaron 一样中立
  • @derpirscher 根据之前的交流,我将放弃进一步评论。如前所述,他的回答是中立的。
【解决方案2】:

一种选择是从 Jproperty 中获取键值。

var files = JArray.Parse(YourJSON);
foreach (JArray item in files.Children())
 {
      foreach (JObject obj in item.Children())
        {
           foreach (JProperty prop in obj.Children())
            {
               string key = prop.Name.ToString();
               string value = prop.Value.ToString();
            }

        }
 }

【讨论】:

    猜你喜欢
    • 2022-12-05
    • 2011-01-27
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多