C# 从JSON字符串中的任意位置查找和检索键控值
我正在检索JSON,它可能在内容项中有所不同,并希望找到与特定键相关的值,例如,在本例中为“地理纬度”和“地理经度”。为了清楚起见,我在这个JSON示例中只包含这两项。(通常要长得多,并且没有特定的顺序) 这是我能想到的解析JSON的最好方法。有更好的办法吗C# 从JSON字符串中的任意位置查找和检索键控值,c#,linq,json.net,C#,Linq,Json.net,我正在检索JSON,它可能在内容项中有所不同,并希望找到与特定键相关的值,例如,在本例中为“地理纬度”和“地理经度”。为了清楚起见,我在这个JSON示例中只包含这两项。(通常要长得多,并且没有特定的顺序) 这是我能想到的解析JSON的最好方法。有更好的办法吗 var metadataObj = JArray.Parse(postMetadataJsonStr); var latContainer = metadataObj.Descendants() .OfType<JObjec
var metadataObj = JArray.Parse(postMetadataJsonStr);
var latContainer = metadataObj.Descendants()
.OfType<JObject>()
.Where(x => x["key"] != null &&
x["key"].Value<string>() == "geo_latitude").Select(y => y["value"]);
var latTokenJValue = latContainer.FirstOrDefault();
if (latTokenJValue == null) return;
var latitude = latTokenJValue.ToString();
var metadataObj=JArray.Parse(postMetadataJsonStr);
var latContainer=metadataObj.subjects()
第()类
。其中(x=>x[“键”!=null&&
x[“键”]。值()=“地理纬度”)。选择(y=>y[“值”);
var latTokenJValue=latContainer.FirstOrDefault();
if(latTokenJValue==null)返回;
var latitude=latTokenJValue.ToString();
我会将您的json转换为字典
var metadataObj = JArray.Parse(postMetadataJsonStr);
var dict = metadataObj.ToDictionary(x => (string)x["key"], x => (double)x["value"]);
Console.WriteLine(dict["geo_latitude"]);
你可以试试使用。它支持查询语法。此外,您可以使用on
JToken
并避免null
检查:.Where(x=>(string)x[“key”]==“geo_latitude”)
,这看起来有点简单。@dbc使用SelectTokens,我可以得到var latitude=metadataObj.SelectToken($[?(@.key==“geo_latitude”).value”).ToString();顺便说一句(我知道我的示例数据中没有包含这个),我必须将字典值视为字符串。其余大部分数据都是文本数据。这只是意味着在适当的时间额外转换为double。@Stonetip然后用(string)
替换(double)
var metadataObj = JArray.Parse(postMetadataJsonStr);
var dict = metadataObj.ToDictionary(x => (string)x["key"], x => (double)x["value"]);
Console.WriteLine(dict["geo_latitude"]);