JObject.SelectToken作为JObject Newtonsoft.JSON C#

时间:2018-09-14 09:02:49

标签: c# json json.net

我想查询JObject,并再次以递归方式查询结果。

因此JObject.SelectToken是该属性的结果。因此,再次查询属性不会获得价值,因为它不是JObject

所以请有人建议我实现这一目标。

示例代码:

JObject Jobj = JObject.parse(@"{
  ""patient_demog_information"": {
    ""patient_id"": ""2558765"",
    ""patient_name"": {
      ""given_name"": ""29 th june 2018"",
      ""family_name"": ""0016"",
      ""middle_name"": """",
      ""suffix_name"": """",
      ""prefix_name"": """",
      ""degree_name"": """"
    }
  }
}");

所以,不是直接按步骤进行操作,而是在Patient_name中获得了Middle_name值

JToken pat_demog = Jobj.SelectToken("$.patient_demog_information");

JToken pat_name = pat_demog.SelectToken("$.patient_name");

因此,在这里我得到pat_demog,并且通过查询它没有得到pat_name 因为它不是JObject的属性。

1 个答案:

答案 0 :(得分:2)

我不确定您的意思是什么,但是您可以继续使用SelectToken继续在树上钻,例如:

JObject Jobj = JObject.Parse(@"{
  ""patient_demog_information"": {
    ""patient_id"": ""2558765"",
    ""patient_name"": {
      ""given_name"": ""29 th june 2018"",
      ""family_name"": ""0016"",
      ""middle_name"": """",
      ""suffix_name"": """",
      ""prefix_name"": """",
      ""degree_name"": """"
    }
  }
}");

JToken pat_demog = Jobj.SelectToken("$.patient_demog_information");

JToken pat_name = pat_demog.SelectToken("$.patient_name");

JValue family_name = (JValue)pat_name.SelectToken("$.family_name");

Console.WriteLine(family_name.Value);

上面的内容强制转换为JValue,但是我们可以直接将其强制转换为字符串

string value = (string)pat_name.SelectToken("$.family_name");

Console.WriteLine(value);