使用属性查询 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();

使用属性查询 JSON 数组

备注:比较字符串,就像您的解决方案不安全一样,您可能需要删除空格并修剪它。我认为您需要找到更优雅的方式来比较标题值。

以下是工作代码:

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);