【问题标题】:Retrieving "images" from a JSON string retrived from Instagram API从 Instagram API 检索的 JSON 字符串中检索“图像”
【发布时间】:2012-12-05 18:30:59
【问题描述】:

使用 C# 和 Visual Studio 2010(Windows 窗体项目)、InstaSharp 和 Newtonsoft.Json 库。

当我请求特定主题标签时,我想从 Endpoint Instagram API 返回给我的 JSON 字符串中获取 图像 url

到目前为止,我可以检索 JSON 字符串。

我正在尝试使用 Newtonsoft.Json 使用示例反序列化对象,但我可能无法正确理解对象的 JSON 字符串表示。

下面是一个简化的示例response,我从他们的文档中的 api 调用tags/tag-name/media/recent 获得。 source here

{
    "data": [{
        "type": "image",
        "filter": "Earlybird",
        "tags": ["snow"],
        "comments": {
        }
        "caption": {
        },
        "likes": {
        },
        "created_time": "1296703536",
        "images": {
            "low_resolution": {
                "url": "http://distillery.s3.amazonaws.com/media/2011/02/02/f9443f3443484c40b4792fa7c76214d5_6.jpg",
                "width": 306,
                "height": 306
            },
            "thumbnail": {
                "url": "http://distillery.s3.amazonaws.com/media/2011/02/02/f9443f3443484c40b4792fa7c76214d5_5.jpg",
                "width": 150,
                "height": 150
            },
            "standard_resolution": {
                "url": "http://distillery.s3.amazonaws.com/media/2011/02/02/f9443f3443484c40b4792fa7c76214d5_7.jpg",
                "width": 612,
                "height": 612
            }
        },
        "id": "22699663",
        "location": null
    },
    ...
    ]
}

我想在images 部分中专门获取standard_resolution

这是我目前拥有的相关代码。

//Create the Client Configuration object using Instasharp
var config = new InstaSharp.Endpoints.Tags.Unauthenticated(config);

//Get the recent pictures of a particular hashtag (tagName)
var pictures = config.Recent(tagName);

//Deserialize the object to get the "images" part
var pictureResultObject = JsonConvert.DeserializeObject<dynamic>(pictureResult.Json);
            consoleTextBox.Text = pictureResult.Json;
            var imageUrl = pictureResultObject.Data.Images;
            Console.WriteLine(imageUrl);

我收到错误:Additional information: Cannot perform runtime binding on a null reference

所以imageUrl 在我调试时确实为空,因此表明我没有以正确的方式访问它。

谁能向我解释如何使用 Newtonsoft.Json 访问这个 JSON 字符串的不同部分?

【问题讨论】:

    标签: c# json instagram json.net


    【解决方案1】:

    使用 Newtonsoft.Json

    dynamic dyn = JsonConvert.DeserializeObject(json);
    foreach (var data in dyn.data)
    {
        Console.WriteLine("{0} - {1}",
                data.filter,
                data.images.standard_resolution.url);
    }
    

    【讨论】:

    • 再次感谢!有用。您能向我解释一下dyn 是如何表示的吗?看起来就像一个对象数组。
    • @ali dyn.data 是一个数组。您也可以以dyn.data[0].... 的身份访问它,使用json 时JsonViewer 可能会有很大帮助。
    • PS! Instagram 已将名称“数据”更改为 json 中的“项目”
    【解决方案2】:

    我为 .net 编写了一个插件,它负责反序列化 json 字符串并返回一个数据表。它仍在开发中,但看看它是否有帮助。 Instagram.NET on Github

    【讨论】:

    • 这太棒了。希望看到对 Instagram 订阅端点的本地桌面 WPF 应用程序的支持。
    • 感谢@ali 一旦我必须及时更新那个插件,我会把源代码放在 github 上以便人们可以贡献
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多