我从几个不同的Web服务接收JSON输出。我需要从每个服务获取一些令牌数据,但每次都在不同的数组中。 E.g:
服务1:
{
"service_name": "service1",
"service1_data": {
"token_data": "WSD123456789"
}
}
服务2:
{
"service_name": "service2",
"service2_data": {
"token_data": "QSD76662345"
}
}
所以我正在寻找一种方法来搜索" token_data"的价值。无论阵列在哪里,它都可能。目前我必须手动获取它:
json1["service1_data"]["token_data"]
如果这是一个简单的方法,我们将非常感激。谢谢!
答案 0 :(得分:0)
您可以将JSON转换为XML,然后使用类似'// token_data'的xpath来查找令牌,假设只是一个简单的字符串搜索或正则表达式。
byte[] bytes = Encoding.ASCII.GetBytes(json);
using (var stream = new MemoryStream(bytes))
{
var quotas = new XmlDictionaryReaderQuotas();
var jsonReader = JsonReaderWriterFactory.CreateJsonReader(stream, quotas);
var xml = XDocument.Load(jsonReader);
}
可以找到Xpath信息here
答案 1 :(得分:0)
根据评论中的建议,您可以使用JSONPath。
在您的方案中,$.service1_data.token_data.*
应该为您提供所需的所有值。
仅当数组中token_data的深度始终相同时才有效。
答案 2 :(得分:0)
NuGet Install-Package Newtonsoft.Json
上提供的Newtonsoft.Json包允许您使用LINQ表达式遍历Json对象。
var jsonText = @"{
""service_name"": ""service1"",
""service1_data"": {
""token_data"": ""WSD123456789""
}
}";
var jsonObject = JsonConvert.DeserializeObject<JToken>(jsonText);
System.Diagnostics.Debug.Assert(jsonObject["service1_data"].Value<string>("token_data") == "WSD123456789");
请参阅the JToken reference以了解如何从Json中检索值。