我有一些像这样的JSON:
[{
"Headers": ["Building ID",
"Building",
"Active",
"Last Updated Date"],
"ID": "Table_1890",
"Rows": [["1",
"2 Chifley Tower, Sydney",
"True",
""],
["5",
"60 Martin Place, Sydney",
"True",
""],
["11",
"275 Kent Street, Sydney",
"True",
""],
["16",
"360 Collins Street, Melbourne",
"False",
""]]
},
{
"Headers": ["FloorID",
"Floor",
"Active",
"Last Updated Date"],
"ID": "Table_1890",
"Rows": [["1",
"2 Chifley Tower, Sydney",
"True",
""],
["5",
"60 Martin Place, Sydney",
"True",
""],
["11",
"275 Kent Street, Sydney",
"True",
""],
["16",
"360 Collins Street, Melbourne",
"False",
""]]
}]
我想使用Headers属性查询特定的JSON数组。
例如,我想让数组在哪里
"Headers": ["Building ID","Building","Active","Last Updated Date"]
。
所以这应该返回第一个包含标题,ID,行的数组。我真的很感激我能帮助我如何实现这一目标。我正在使用Newtonsoft,我正在对这个数组进行反序列化。
目前我这样做。这会产生错误:
string json = File.ReadAllText(fileSavePath+"\\1240.txt");
JArray ja = JArray.Parse(json);
JObject match = ja.Values<JObject>()
.Where(m => m["Headers"].Value<string>() == "[\"Building ID\",\"Building\",\"Active\",\"Last Updated Date\"]")
.FirstOrDefault();
答案 0 :(得分:1)
注意:比较字符串就像您的解决方案不安全一样,您可能需要删除空格并修剪它。我认为你需要找到更优雅的方法来比较标题值。
以下是工作代码:
JArray objects = JsonConvert.DeserializeObject<JArray>(json);
var compare = @"[
""BuildingID"",
""Building"",
""Active"",
""LastUpdatedDate""
]";
JObject match = objects.Children<JObject>().FirstOrDefault(o => o["Headers"] != null && o["Headers"].ToString().Replace(" ", "") == compare);