【问题标题】:How to get children data from json via linq如何通过 linq 从 json 获取子数据
【发布时间】:2012-07-23 15:55:42
【问题描述】:

我正在使用 json.net,并且我有一个这样的 json 数据,

[
{
  "ID":1098,
  "Name":"JC",
  "Issues":[
     {
        "PriorityLevel":"Low",
        "State":"Open"
     },
     {
        "PriorityLevel":"Low",
        "State":"Open"
     }
  ]
}
]    

我只想通过 linq 从问题中获取子数据。我可以联系到父母,但不能联系到孩子。如果我直接访问儿童数据,我不需要放置多个 for 循环。

谢谢。

【问题讨论】:

  • 对不起,我不明白,你到底是什么意思?
  • @Bora 你以前在这个网站上问过 7 个问题。这些问题中的每一个,您都可以“接受”一个答案作为您问题的答案。你没有为你的任何问题这样做。转到过去的问题并点击帮助您解决问题的答案下方的绿色复选标记。
  • 好吧,我会再做一次对不起。谢谢
  • 公平地说,他的其他问题只有一个得到了回答

标签: c# json linq


【解决方案1】:

您可以只创建一个 Json 对象并将属性提取到 Anonymouse 类型中,然后您可以使用 Linq 进行查询。

string response = @"[{
  ""ID"":1098,
  ""Name"":""JC"",
  ""Issues"":[
     {
        ""PriorityLevel"":""Low"",
        ""State"":""Open""
     },
     {
        ""PriorityLevel"":""Low"",
        ""State"":""Open""
     }
  ]}]";

var jsonObject = JObject.Parse(response);
var issues = jsonObject["Issues"].Select(x => new
             {
                 PriorityLevel = (string)x.SelectToken("PriorityLevel"),
                 State = (string)x.SelectToken("State")
             });

您使用 SelectToken 来获取问题的子级。现在您可以查询任何您想要的问题。

var lowPriorities = issues.Where(x => x.PriorityLevel == "Low");

这是“Deserializing Using LINQ Example”上 json.net 页面的直接链接。

【讨论】:

  • 我收到此错误。从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:StartArray。路径'',第 1 行,位置 1。
  • 原因是代码使用了JObject,而不是JArray
  • @Bora 我添加了一个指向 Json.Nets 网页的链接,看看文档是否可以帮助你让它最终工作。
【解决方案2】:

给你

{
    var json = @"[      {
    ""ID"":1098,
    ""Name"":""JC"",
    ""Issues"":[
        {
            ""PriorityLevel"":""Low"",
            ""State"":""Open""
        },
        {
            ""PriorityLevel"":""Low"",
            ""State"":""Open""
        }
    ]}]";

    var a = JArray.Parse(json);

    var issues = a.SelectMany (x => x["Issues"]);
    var lowPriorities = issues.Where(x => ((string) x["PriorityLevel"]) == "Low");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-13
    • 2021-11-05
    • 2017-01-07
    • 1970-01-01
    • 2018-05-09
    • 2013-01-22
    • 2018-08-21
    • 2015-11-17
    相关资源
    最近更新 更多