使用属性查询 JSON 数组
本文关键字:JSON 数组 查询 属性 | 更新日期: 2023-09-27 18:37:02
我有一些这样的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",
""]]
}]
我想使用标头属性查询特定的 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();
备注:比较字符串,就像您的解决方案不安全一样,您可能需要删除空格并修剪它。我认为您需要找到更优雅的方式来比较标题值。
以下是工作代码:
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);