使用属性

时间:2016-03-02 06:12:35

标签: c# .net json

我有一些像这样的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();

1 个答案:

答案 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);
相关问题