获取JSON对象节点

时间:2012-01-01 21:05:00

标签: c# asp.net json

我有一个json对象,我希望得到以下值: 实体>媒体>尺寸>大> ħ

有没有办法让它像XML一样 - > Xpath方法?

这是因为...而与问题无关的额外线条。

{
  "created_at": "Sun, 01 Jan 2012 17:05:32 +0000",
  "entities": {
    "user_mentions": [
      {
        "screen_name": "nurdanterbiyik",
        "name": "nurdan",
        "id": 264782080,
        "id_str": "264782080",
        "indices": [
          0,
          15
        ]
      }
    ],
    "media": [
      {
        "id": 153522253777219584,
        "id_str": "153522253777219584",
        "indices": [
          44,
          64
        ],
        "media_url": "http://p.twimg.com/AiFrrSmCMAAdEID.jpg",
        "media_url_https": "https://p.twimg.com/AiFrrSmCMAAdEID.jpg",
        "url": "http://t.co/ZwHN9gvO",
        "display_url": "pic.twitter.com/ZwHN9gvO",
        "expanded_url": "http://twitter.com/emelkiraac/status/153522253773025280/photo/1",
        "type": "photo",
        "sizes": {
          "large": {
            "w": 536,
            "h": 800,
            "resize": "fit"
          },

2 个答案:

答案 0 :(得分:8)

使用JSON.NET,您可以通过多种方式读取数据,而无需将JSON文本反序列化为对象。这是一个简化的例子:

string json = @" {
""created_at"": ""Sun, 01 Jan 2012 17:05:32 +0000"",
  ""entities"": {
    ""media"": [{
      ""type"": ""photo"",
      ""sizes"": {
        ""large"": {
          ""w"": 536,
          ""h"": 800,
          ""resize"": ""fit""
        }
      }
    }]
  }
}
";

JObject o = JObject.Parse(json);
int h = (int)o["entities"]["media"][0]["sizes"]["large"]["h"];
int h2 = (int)o.SelectToken("entities.media[0].sizes.large.h");

答案 1 :(得分:0)

我更倾向于将JSON视为序列化对象 - 我要做的第一件也是最后一件事就是将其反序列化为我随后使用的对象。

我不能告诉你在c#中做到这一点的最好方法,但是我使用JSON.NET

运气好了

JSON.NET也会让你(引自网站)“LINQ to JSON适用于你只对从JSON获取值,你没有要序列化或反序列化的类,或者JSON的情况与您的类完全不同,您需要手动读取和写入对象.LINQ to JSON允许您轻松地在.NET中读取,创建和修改JSON。“,这听起来就像您要做的那样。我从来没有尝试过,但是如果你要做的就是从那个长字符串中获取一个数据,那么这听起来是个不错的选择。