【问题标题】:Parse Json data with multiple detail from twitter使用来自 twitter 的多个详细信息解析 Json 数据
【发布时间】:2014-02-21 06:29:51
【问题描述】:

我从 twitter 获得以下输出,我只想从输出中捕获以下详细信息。

  1. 屏幕名称
  2. 关注人数
  3. profile_image_url

问题是数据在嵌套的 Json 中。

Twitter API 输出:

[{ "contributors" : null,
"coordinates" : null,
"created_at" : "Wed Jan 29 09:18:15 +0000 2014",
"favorite_count" : 0,
"favorited" : false,
"geo" : null,
"id" : 428457050109382657,
"id_str" : "428457050109382657",
"in_reply_to_screen_name" : null,
"in_reply_to_status_id" : null,
"in_reply_to_status_id_str" : null,
"in_reply_to_user_id" : null,
"in_reply_to_user_id_str" : null,
"lang" : "en",
"place" : null,
"user" : { "contributors_enabled" : false,
    "follow_request_sent" : null,
    "followers_count" : 218,
    "id" : 609465835,
    "id_str" : "609465835",
    "is_translation_enabled" : false,
    "is_translator" : false,
    "lang" : "en",
    "listed_count" : 3,
    "location" : "Still alpha as hell.",
    "verified" : false
  }
}, 
{ "contributors" : null,
"coordinates" : null,
"created_at" : "Wed Jan 29 09:18:15 +0000 2014",
"favorite_count" : 0,
"favorited" : false,
"geo" : null,
"id" : 428457050109382657,
"id_str" : "428457050109382657",
"in_reply_to_screen_name" : null,
"in_reply_to_status_id" : null,
"in_reply_to_status_id_str" : null,
"in_reply_to_user_id" : null,
"in_reply_to_user_id_str" : null,
"lang" : "en",
"place" : null,
"user" : { "contributors_enabled" : false,
    "follow_request_sent" : null,
    "followers_count" : 1218,
    "id" :33333,
    "id_str" : "609465835",
    "is_translation_enabled" : false,
    "is_translator" : false,
    "lang" : "en",
    "listed_count" : 3,
    "location" : "N",
    "verified" : false
  }
}]

输出是

我正在尝试使用 Newtonsoft Json 反序列化,但失败了。

以下是代码:

        dynamic dynObj = JsonConvert.DeserializeObject(twitAuthResponse);
        foreach (var data in dynObj.user.data)
        {
            //Console.WriteLine("{0}", data.name);
            foreach (var fql in data.user)
            {
                foreach (JProperty keyValue in fql)
                {
                    Console.WriteLine("\t{0} : {1}", keyValue.Name, keyValue.Value);
                }
            }
        }

以上代码返回错误“'Newtonsoft.Json.Linq.JArray'不包含'user'的定义”。

有人可以帮我吗?提前致谢!

【问题讨论】:

    标签: c# json twitter json.net


    【解决方案1】:

    请看以下文章:http://www.hanselman.com/blog/NuGetPackageOfTheWeek4DeserializingJSONWithJsonNET.aspx

    您需要指定要反序列化的对象的类型,而不是使用动态对象。

    类似于:var twitterJson = JsonConvert.DeserializeObject<TwitterResponse>(twitAuthResponse);

    只要此 .NET 对象与 JSON 的架构匹配,它就会自动映射,并且您可以访问所有强类型的属性和值。

    【讨论】:

    • 我试过了,但我不明白如何在嵌套结构中获取数据。我试图获取的“用户”详细信息只不过是一个嵌套的 Json。
    【解决方案2】:

    终于解决了,

    dynamic stuff = JsonConvert.DeserializeObject(twitAuthResponse);
    
    foreach (JObject item in stuff)
    {
        foreach (JProperty trend in item["user"])
        {
            if (trend.Name == "name")
            {
                 // GET NAME
            }
            else if (trend.Name == "followers_count")
            {
                 // GET COUNT
            }
            else if (trend.Name == "profile_image_url")
            {
                 // GET PROFILE URL
            }
        }
    }
    

    【讨论】:

    • 这个信息拯救了我的大脑。其他方法仅适用于标准 JSON 结构,但这确实是可扩展的。我将它用于 Web 脚本 API。 API 不会以标准格式返回所有信息,它的作用就像一个魅力。
    • 您也可以将此动态类型用作多维数组,例如 stuff[0]["user"]["lang"],这正是我想要的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多