【问题标题】:get values from nested JSON array从嵌套的 JSON 数组中获取值
【发布时间】:2017-03-21 18:07:28
【问题描述】:

如何从这个 JSON 中获取单个值?比如SSN?此外,有些项目是可以容纳多个(地址、电话)的数组。解析这个的最佳方法是什么?我尝试过使用 JArray.Parse(data),但仍然无法“找到”单个项目。谁能指出我正确的方向?

[{
    "firstName": "test",
    "middleName": "test",
    "lastName": "test"
},
{
    "addresses":
    [{
        "street": "test",
        "city": "test",
        "state": "test",
        "zip": "test"
    }]
},
{
    "DOB": ""
},
{
    "SSN": "123123123"
},
{
    "occupation": "test",
    "typeOfOccupation": "test"
},
{
    "phones":
    [{
        "phone": "",
        "type": ""
    }]
},
{
    "Email": ""
},
{
    "typeOfId": "",
    "idNumber": "",
    "expirationDate": ""
}]

【问题讨论】:

标签: c# json .net-core


【解决方案1】:

您说您使用了JArray.Parse,但您是否将其用作dynamic? Check Query JSON with dynamic 和 JSON.Net。

var json = "[{ \"firstName\": \"test\", \"middleName\": \"test\", \"lastName\": \"test\" }, { \"addresses\": [{ \"street\": \"test\", \"city\": \"test\", \"state\": \"test\", \"zip\": \"test\" }] }, { \"DOB\": \"\" }, { \"SSN\": \"123123123\" }, { \"occupation\": \"test\", \"typeOfOccupation\": \"test\" }, { \"phones\": [{ \"phone\": \"\", \"type\": \"\" }] }, { \"Email\": \"\" }, { \"typeOfId\": \"\", \"idNumber\": \"\", \"expirationDate\": \"\" }]";
var data = JArray.Parse(json);
JToken ssn = data.SelectToken("$..SSN")
if(ssn!=null){
    Console.WriteLine(ssn.Value<string>());
}

工作fiddle here。

【讨论】:

  • 谢谢马蒂亚斯。有没有办法在不知道数据位置的情况下做到这一点?例如,有时 SSN 可能出现在 DOB 之前(或者结构可能有其他变化)?我还能“找到” SSN 吗?
  • 因为它是一个数组而不是一个对象,不,不要认为你可以,除非你在整个数组中循环寻找所说的属性,效率不高。
  • 这似乎有效:动态 arr = JArray.Parse(data); JToken ssn = arr.SelectToken("$..SSN");你觉得有什么问题吗?
  • 有趣,从未尝试过 SelectToken 方法上的点,使用 Value&lt;string&gt;() 更新了 fiddle 的工作代码
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 2020-11-29
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多