从嵌套的 Json 对象中读取值

Posted

技术标签:

【中文标题】从嵌套的 Json 对象中读取值【英文标题】:Read value from nested Json object 【发布时间】:2020-11-09 02:08:54 【问题描述】:

我正在尝试从嵌套的 Json 对象中读取一个值,但我收到了 Parse 错误:

我的 Json 对象:


    "MessageId": "f6774927-37cf-4608-b985-14a7d86a38f9",
    "Time": "2017-04-06T16:28:38.0719933+02:00",
    
    "Data":
    
        "ID":
        
            "value": "0008044834"
        ,
        "Carrier":
        
            "value": 0
        ,
        "Tool":
        
            "value": 0
        
    

          var myJsonString = File.ReadAllText(_currentDictory.FullName + @"\test\" + completeFilename);


            var myJObject = JObject.Parse(myJsonString);


            var serial = myJObject.SelectToken("Data.ID").Value<String>();

System.InvalidCastException
  HResult=0x80004002
  Message=Cannot cast Newtonsoft.Json.Linq.JObject to Newtonsoft.Json.Linq.JToken.
  Source=Newtonsoft.Json

读取“MessageID”等其他值没有任何问题,但一旦我尝试获取“Data.XYZ”,我就会收到上述错误。

【问题讨论】:

【参考方案1】:

您需要将value 添加到您的json 路径中:

var serial = myJObject.SelectToken("Data.ID.value").Value<String>();

您当前的路径选择了JObject,其中包含一个名为value 的属性,您无法将其直接转换为字符串。

【讨论】:

【参考方案2】:

MessageId 是一个字符串。所以你可以直接读取它的值。 另一方面,数据包含对象(参见 和 )。因此你需要使用

var serial = myJObject.SelectToken("Data.ID.value").Value<String>();

另见: Getting 'Cannot cast Newtonsoft.Json.Linq.JObject to Newtonsoft.Json.Linq.JToken' when retrieving items from JSON

【讨论】:

以上是关于从嵌套的 Json 对象中读取值的主要内容,如果未能解决你的问题,请参考以下文章

如何读取嵌套的 json 对象? [复制]

Objective C如何从嵌套的JSON中读取

使用 python/pandas 从特定文件夹中读取几个嵌套的 .json 文件到 excel 中

如何在python中读取嵌套的json数据值?

从 S3 读取大型 JSON 文件 (3K+) 并从数组中选择特定键

在angular7中读取复杂的嵌套json对象数组