我一直在构建一个应用程序,其中JSON将由用户API提供。它应该使用JSONPath从JSON读取数据,并保存所选部分。我正在尝试使用
Json.Net
(Newtonsoft)。以下JSON是一个示例:
{
// other properties here and different structure here
"Data": [
{
"Code": "625087",
"Name": "Customer Name",
"Email": "test@hfgidfgd.com"
},
{
"Code": "625087",
"Name": "Customer Name",
"Email": "test@hfgidfgd.com"
},
{
"Code": "625087",
"Name": "Customer Name",
"Email": "test@hfgidfgd.com"
}
],
// other properties here and different structure here
}
我想提取
Data
属性内容,并将其转换为
List<Dictionary<string, object>>
在我的应用程序中进行操作。
在工具中,如
jsonpath.com
以下JSONPath查询可以正常工作,但对于Newtonsoft则不行:
// get that json
string content = GetJson();
var jo = JObject.Parse(content);
var jsonPath = "$..Data.*";
var jsonPathResult = jo.SelectTokens(jsonPath, true /* to get error when it is not found */ );
相反,我得到了一个例外:
属性“*”在JArray上无效。
如果我这样做JSONPath:
var jsonPath = "$..Data"; // same for just: "Data"
var jsonPathResult = jo.SelectTokens(jsonPath);
我必须使用两个嵌套的foreach循环结果,我认为这不是一个优雅的解决方案:
var result = new List<Dictionary<string, object>>();
foreach (var jsonResult in jsonPathResult)
{
foreach (var item in jsonResult)
{
var fields = JsonConvert.DeserializeObject<Dictionary<string, object>>(item.ToString());
// some adjusts on the fields dictionary will be applied here...
result.Add(fields);
}
}
是否有任何方法可以获得只进行单个循环的结果
数据
所有物