JObject.SelectToken作为JObject Newtonsoft.JSON C#
我想以递归的方式查询JObject.SelectToken作为JObject Newtonsoft.JSON C#,c#,json,json.net,C#,Json,Json.net,我想以递归的方式查询JObject,并再次查询结果 因此,JObject.SelectToken是结果属性。因此,再次查询属性并没有得到值,因为它不是JObject 所以,请任何人给我一个方法来实现这一点 示例代码: JObject Jobj = JObject.parse(@"{ ""patient_demog_information"": { ""patient_id"": ""2558765"", ""patient_name"": { ""given_na
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中得到了中间的_name值
JToken pat_demog = Jobj.SelectToken("$.patient_demog_information");
JToken pat_name = pat_demog.SelectToken("$.patient_name");
因此,这里我得到的是pat\u demo
,通过查询它没有得到pat\u名称
因为它不是一个属性
JObject
,我不太清楚您的意思,但您可以继续使用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);
我不完全确定您的意思,但您可以继续使用
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);
您期望的输出是什么?@KevinSmith我想获取“patient\u name”属性值,然后再次从该结果中筛选“middle\u name”。因此,通过这种方式,我希望筛选出的值依赖于路径“$.patient\u demog\u information.patient\u name.middle\u name”逐步进行。您期望的输出是什么?@KevinSmith我希望获得“patient\u name”属性值,并再次从该结果中筛选“middle\u name”。因此,通过这种方式,我希望筛选出的值取决于路径“$.patient\u demog\u information.patient\u name.middle\u name”逐步。SelectToken返回令牌值,而不是令牌本身,因此进一步筛选不起作用!啊,对了,把它转换成一个
JValue
或字段的值。。。例如string
JToken pat\u demog=Jobj.SelectToken(“$.patient\u demog\u information”)
pat_demog包含如下值:“患者id”:“2558765”,“患者姓名”:“{”给定姓名“:”2018年6月29日“,”家人姓名“:”0016“,”中间姓名“:”,”后缀名“:”,”前缀名“:”,”学位名“:”}
所以这里的问题是过滤这个值!因为它不是对象,所以通过使用patient\u name
值对其进行过滤,返回null@AbdulRahman这工作得非常好,签出dotnetfiddle-SelectToken返回令牌值,而不是令牌本身,因此进一步过滤不起作用!啊,对了,把它转换成一个JValue
或字段的值。。。例如string
JToken pat\u demog=Jobj.SelectToken(“$.patient\u demog\u information”)
pat_demog包含如下值:“患者id”:“2558765”,“患者姓名”:“{”给定姓名“:”2018年6月29日“,”家人姓名“:”0016“,”中间姓名“:”,”后缀名“:”,”前缀名“:”,”学位名“:”}
所以这里的问题是过滤这个值!因为它不是对象,所以通过使用patient\u name
值对其进行过滤,返回null@AbdulRahman这工作非常好,检查dotnetfiddle-