Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过键获取JArray字典的值_C#_Unity3d_Mono_Virtual Reality - Fatal编程技术网

C# 如何通过键获取JArray字典的值

C# 如何通过键获取JArray字典的值,c#,unity3d,mono,virtual-reality,C#,Unity3d,Mono,Virtual Reality,我有一个json字符串: [ [ { "Antibiotic after diagnosis":[ "Azithromycin", "Ciprofloxacin HCl", "Ampicillin Sodium" ], "City":[ "Tel Aviv", "Jerusalem" ]

我有一个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"]);
data=Newtonsoft.Json.JsonConvert.DeserializeObject(“*Json str*”);
JParameters=数据[0]为JArray;
Log(JParameters[“诊断后抗生素]);
但是,当我运行代码时,它在代码行(Debug.Log(JParameters[“诊断后抗生素”];)上崩溃,出现以下错误:

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


在错误状态下,
JParameters
的索引应为整数。您想要的是:
j参数[0][“诊断后抗生素”]

上面的代码选择第一个元素,然后选择字典键“诊断后抗生素”的值


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

错误状态下,
JParameters的索引应该是一个整数。您想要的是:
j参数[0][“诊断后抗生素”]

上面的代码选择第一个元素,然后选择字典键“诊断后抗生素”的值


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

一个选项是从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();
            }

        }
 }

一个选项是从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();
            }

        }
 }


JParameters=数据[0]为JArray->您有一个数组。“诊断后抗生素”是该数组中每个项目的属性,而不是数组的属性(数组本身不能有属性),因此会出现错误。您希望接收什么?每个对象的“诊断后抗生素”值还是仅第一个?@razerez取决于您想要的结果……仔细看,json是一个包含两个参数的列表,第一个是列表字典,第二个是字典列表我想获得数据[0]->“诊断后抗生素”中第一项的值这就是“阿奇霉素”JP参数[0][“诊断后抗生素”]是你想要的。在数组
JParameters=data[0]中有另一个数组作为JArray->您有一个数组。“诊断后抗生素”是该数组中每个项目的属性,而不是数组的属性(数组本身不能有属性),因此会出现错误。您希望接收什么?每个对象的“诊断后抗生素”值还是仅第一个?@razerez取决于您想要的结果……仔细看,json是一个包含两个参数的列表,第一个是列表字典,第二个是字典列表我想获得数据[0]->“诊断后抗生素”中第一项的值这就是“阿奇霉素”JP参数[0][“诊断后抗生素”]是你想要的。你有另一个数组在arrayNo需要不友好,特别是如果你的答案也是错误的
JParameters=data[0]为JArray
,因此已经是最外层列表的第一个元素。@derpirscher我已经标记了您的注释。亚伦的回答是中立的,不是不友好的。然而,你自己评论的语气是不友好的。@derpirscher我明白你的意思。我按原样测试了上面的JSON数组,没有考虑
数据[0]
行。我已经更新了我的answer@john就我个人而言,我读了一个答案,比如“读x来正确理解y是如何工作的”,但没有指出一个具体的错误,比如“你太笨了,所以我不会花时间来解释”,为什么我的评论不友好?它至少和艾伦的一样中性s@derpirscher基于之前的交流,我将不作进一步评论。如前所述,他的回答是中立的。没有必要不友好,尤其是如果你的回答也是错误的
JParameters=data[0]为JArray
,因此已经是最外层列表的第一个元素。@derpirscher我已经标记了您的注释。亚伦的回答是中立的,不是不友好的。然而,你自己评论的语气是不友好的。@derpirscher我明白你的意思。我按原样测试了上面的JSON数组,没有考虑
数据[0]
行。我已经更新了我的answer@john就我个人而言,我读了一个答案,比如“读x来正确理解y是如何工作的”,但没有指出一个具体的错误,比如“你太笨了,所以我不会花时间来解释”,为什么我的评论不友好?它至少和艾伦的一样中性s@derpirscher基于之前的交流,我将不作进一步评论。如前所述,他的回答是中立的。