【问题标题】:Retrieve specific value from JSON in C#在 C# 中从 JSON 中检索特定值
【发布时间】:2018-03-17 09:54:02
【问题描述】:

我需要从下面的 JSON 中获取值,例如如何在 Info 中索引 Id?

整个 JSON 由许多匹配项组成,这只是一个 ID 为 5aa891cd1e1422452e8b4567 的匹配项,这是一个匹配项的结构。

我尝试:

var jsonDATA = JObject.Parse(data);

foreach (var e in jsonDATA["events"]) {
    //in this step, the result is JSON below
    var id = e["info"]["id"];` // error: cannot access child value on newtonsoft json linq jproperty
}

有什么想法吗?

{"5aa891cd1e1422452e8b4567": {
      "info": {
        "id": "5aa891cd1e1422452e8b4567",
        "event_id": "58911142245284567",
        "name": "Santos Laguna vs Queretaro",
        "sport": "Soccer",
        "league": "Mexico Cup",
        "period": "Finished",
        "score": "1:0",
        "status": "Live",
        "start_time": "2018.03.14 03:06:53",
        "state": 1017,
        "state_name": "Fulltime",
        "minute": 90,
        "safe": false,
        "safe2": false,
        "blocked": false,
        "stop": false
      },
      "stats": {
        "home": {
          "name": "Santos Laguna",
          "color": "",
          "position": "",
          "on_target": "",
          "off_target": "",
          "attacks": "",
          "dangerous_attacks": "",
          "possession": "",
          "goals": 1,
          "corners": 5,
          "yellowcards": 1,
          "redcards": 0,
          "throwins": 0,
          "freekicks": 0,
          "goalkicks": 0,
          "penalties": 0,
          "substitutions": 3,
          "ht_result": 1
        },
        "away": {
          "name": "Queretaro",
          "color": "",
          "position": "",
          "on_target": "",
          "off_target": "",
          "attacks": "",
          "dangerous_attacks": "",
          "possession": "",
          "goals": 0,
          "corners": 8,
          "yellowcards": 3,
          "redcards": 1,
          "throwins": 0,
          "freekicks": 0,
          "goalkicks": 0,
          "penalties": 0,
          "substitutions": 3,
          "ht_result": 0
        }
      },
      "odds": []
    }}

【问题讨论】:

  • 您的 json 数据不代表您的 javascript 所期望的 - 您是否显示了正确的 javascript/json 数据?
  • jsonDATA["events"] 应该是jsonDATA["5aa891cd1e1422452e8b4567"],但它不是数组
  • @karlo 你能检查一下哪个子属性会引发错误吗?获取“信息”或“身份”时?
  • 那么他必须这样做; e["5aa891cd1e1422452e8b4567"]["info"]["id"] 那个元素?数组中每个元素的第一个元素是 Guid 吗?
  • @FrankNielsen 是的,第一个元素是 Guid,它是比赛 ID,我必须遍历比赛并获取有关比赛的信息和其他统计数据,我也尝试 var id = e[" 5aa891cd1e1422452e8b4567"]["Info"]["id"];,但我仍然有错误:无法访问 Newtonsoft.Json.Linq.JProperty 上的子值。'

标签: c# json parsing


【解决方案1】:

您可以像这样使用匿名类型deserialization 来处理您的数据。希望它有效。

//using Newtonsoft.Json;
var jsonData = JsonConvert.DeserializeAnonymousType(
    data,
    new 
    {
      events = new[]
      {
        new
        { 
          Id = new { info = "", stats = "", away = "", odds = "" }
        }
      }
  );            

foreach(var item in jsonData.events)
{
    var id=item.info.id; // getting id present in info
}

【讨论】:

  • 我可以用这个得到名称的值:string name1 = MATCHES["events"]["5aa891cd1e1422452e8b4567"]["info"]["id"].ToString();但是 5aab5b9a1d1422b7488b4567 是一直在变化的 guid,除 guid 之外的 JSON 结构已确定,如何在 C# 类中处理或映射 guid?
  • foreach 循环将为您评论的问题提供答案。 item_in foreach_ 总是给你的 guid @karlo
  • 我可以在第一级 JSON 上使用 foreach 循环,例如: var match = (from x in MATCHES["events"] select x).ToList() 并且它正在工作 - 结果是 JSON上面的代码帖子,但是要遍历 Info 成员或 Stats ??一直以来我都有错误:无法访问 Newtonsoft.Json.Linq.JProperty foreach(MATCHES.SelectToken("events")中的JProperty x) { foreach (x.SelectToken("info")中的JProperty y) { } } 上的子值
猜你喜欢
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 2018-04-27
相关资源
最近更新 更多