无法加载 JSON 数据

Posted

技术标签:

【中文标题】无法加载 JSON 数据【英文标题】:Failed To load JSON Data 【发布时间】:2014-04-05 10:15:33 【问题描述】:

我正在尝试从 Instagram API 获取 JSON,并使用 Xamarin.ios 将人名放在我的时间轴上以显示在 UITableView 上。我正在尝试使用 JSON.Net 和 Restsharp 来做到这一点,但是在过去的几周里,这个问题从未得到解决。这是我尝试检索数据的方式,问题在于有一条错误消息:System.InvalidCastexception 已被抛出,无法从源类型转换为目标类型。

除此之外,我如何将特定元素加载到表格上?

我已将其更改为JObject.Parse(response.content); 现在我收到这个错误: 这是我更新的代码:

client.ExecuteAsync(request, response => 
                var array = JObject.Parse(response.Content);
                foreach (JObject obj in array)  
                           
                        var Name = (string)obj["data"]["user"]["full_name"];
                        var Caption = (string)obj["data"]["caption"]["text"];
                        var picURL = (string)obj["data"]["images"]["low_resolution"]["url"];

                        System.Console.WriteLine("Name of " + Name + ", Caption of " + Caption + ", and picurl of " + picURL);
                     
            );

这是 JSON 响应:


    "pagination": 
        "next_url": "https://api.instagram.com/v1/users/self/feed?access_token=6489401.88b3fb2.7af2a0355ea24f4590efa1ee82ed0a49&max_id=668439962408115415_16915182",
        "next_max_id": "668439962408115415_16915182"
    ,
    "meta": 
        "code": 200
    ,
    "data": [
        
            "attribution": null,
            "tags": [
                "selfie"
            ],
            "type": "image",
            "location": null,
            "comments": 
                "count": 0,
                "data": []
            ,
            "filter": "Normal",
            "created_time": "1393953134",
            "link": "http://instagram.com/p/lIO1_jmkkr/",
            "likes": 
                "count": 14,
                "data": [
                    
                        "username": "muahjay",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_304620904_75sq_1392618687.jpg",
                        "id": "304620904",
                        "full_name": "Jeanettee Nicole Cambero Gamez"
                    ,
                    
                        "username": "iam_mrsmith31",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_32806209_75sq_1392607367.jpg",
                        "id": "32806209",
                        "full_name": "Kiondrix Smith"
                    ,
                    
                        "username": "anniyalation",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_30752906_75sq_1390523572.jpg",
                        "id": "30752906",
                        "full_name": "Niya G."
                    ,
                    
                        "username": "fonzo_badmon",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_271402803_75sq_1393641486.jpg",
                        "id": "271402803",
                        "full_name": "Slimshady"
                    
                ]
            ,
            "images": 
                "low_resolution": 
                    "url": "http://distilleryimage11.s3.amazonaws.com/e02592b0a3bf11e3b63212d269f676eb_6.jpg",
                    "width": 306,
                    "height": 306
                ,
                "thumbnail": 
                    "url": "http://distilleryimage11.s3.amazonaws.com/e02592b0a3bf11e3b63212d269f676eb_5.jpg",
                    "width": 150,
                    "height": 150
                ,
                "standard_resolution": 
                    "url": "http://distilleryimage11.s3.amazonaws.com/e02592b0a3bf11e3b63212d269f676eb_8.jpg",
                    "width": 640,
                    "height": 640
                
            ,
            "users_in_photo": [],
            "caption": 
                "created_time": "1393953134",
                "text": "#Selfie",
                "from": 
                    "username": "kthompkins7",
                    "profile_picture": "http://images.ak.instagram.com/profiles/profile_5941681_75sq_1378508674.jpg",
                    "id": "5941681",
                    "full_name": "kthompkins7"
                ,
                "id": "668849828018145517"
            ,
            "user_has_liked": false,
            "id": "668849827690989867_5941681",
            "user": 
                "username": "kthompkins7",
                "website": "",
                "profile_picture": "http://images.ak.instagram.com/profiles/profile_5941681_75sq_1378508674.jpg",
                "full_name": "kthompkins7",
                "bio": "",
                "id": "5941681"
            
        ,
        
            "attribution": null,
            "tags": [
                "rp",
                "amen"
            ],
            "type": "image",
            "location": null,
            "comments": 
                "count": 5,
                "data": [
                    
                        "created_time": "1393949795",
                        "text": "@tmcmc Dobson a Christian!!!!",
                        "from": 
                            "username": "keelanwillison",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_26089241_75sq_1380511035.jpg",
                            "id": "26089241",
                            "full_name": "Keelanwillison"
                        ,
                        "id": "668821819276579152"
                    ,
                    
                        "created_time": "1393950029",
                        "text": "Yo my cousin got me a signed autograph from you at the Boston boat show thanks man  @a_dobson3",
                        "from": 
                            "username": "danthebigboy914",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_27354625_75sq_1393859632.jpg",
                            "id": "27354625",
                            "full_name": "Danny Chiappetta"
                        ,
                        "id": "668823778033324461"
                    ,
                    
                        "created_time": "1393950659",
                        "text": "Amen",
                        "from": 
                            "username": "sandyrodr",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_44889389_75sq_1361591427.jpg",
                            "id": "44889389",
                            "full_name": "sandyrodr"
                        ,
                        "id": "668829062428545715"
                    ,
                    
                        "created_time": "1393950664",
                        "text": "????",
                        "from": 
                            "username": "cherydaily",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_18483862_75sq_1379884114.jpg",
                            "id": "18483862",
                            "full_name": "Andrew \"Drew\" Chery"
                        ,
                        "id": "668829109488636596"
                    ,
                    
                        "created_time": "1393951921",
                        "text": "Amen",
                        "from": 
                            "username": "bostonsonia",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_182219303_75sq_1391293289.jpg",
                            "id": "182219303",
                            "full_name": "Sonia"
                        ,
                        "id": "668839648625348773"
                    
                ]
            ,
            "filter": "Normal",
            "created_time": "1393949714",
            "link": "http://instagram.com/p/lIIUdggtOj/",
            "likes": 
                "count": 324,
                "data": [
                    
                        "username": "bwest05",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_387702554_75sq_1393739891.jpg",
                        "id": "387702554",
                        "full_name": "????bb????"
                    ,
                    
                        "username": "babygirl6193",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_23365060_75sq_1384972330.jpg",
                        "id": "23365060",
                        "full_name": "babygirl6193"
                    ,
                    
                        "username": "derekmooney1",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_218356294_75sq_1388601101.jpg",
                        "id": "218356294",
                        "full_name": "Derek Mooney"
                    ,
                    
                        "username": "zay0613",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_342812999_75sq_1369576584.jpg",
                        "id": "342812999",
                        "full_name": "Zay"
                    
                ]
            ,
            "images": 
                "low_resolution": 
                    "url": "http://distilleryimage11.s3.amazonaws.com/0e1b270aa3b811e395af12cdc849cb9b_6.jpg",
                    "width": 306,
                    "height": 306
                ,
                "thumbnail": 
                    "url": "http://distilleryimage11.s3.amazonaws.com/0e1b270aa3b811e395af12cdc849cb9b_5.jpg",
                    "width": 150,
                    "height": 150
                ,
                "standard_resolution": 
                    "url": "http://distilleryimage11.s3.amazonaws.com/0e1b270aa3b811e395af12cdc849cb9b_8.jpg",
                    "width": 640,
                    "height": 640
                
            ,
            "users_in_photo": [],
            "caption": 
                "created_time": "1393949714",
                "text": "#RP from @flashgoodwin #AMEN",
                "from": 
                    "username": "a_dobson3",
                    "profile_picture": "http://images.ak.instagram.com/profiles/profile_203045179_75sq_1374262647.jpg",
                    "id": "203045179",
                    "full_name": "a_dobson3"
                ,
                "id": "668821135462420769"
            ,
            "user_has_liked": false,
            "id": "668821135110099875_203045179",
            "user": 
                "username": "a_dobson3",
                "website": "",
                "profile_picture": "http://images.ak.instagram.com/profiles/profile_203045179_75sq_1374262647.jpg",
                "full_name": "a_dobson3",
                "bio": "",
                "id": "203045179"
            
        ,
        
            "attribution": null,
            "tags": [
                "tb12"
            ],
            "type": "image",
            "location": null,
            "comments": 
                "count": 169,
                "data": [
                    
                        "created_time": "1393952642",
                        "text": "My guy! The greatest! I just want him to get another ring so the haters can stop saying he hasn't won one since 04. I mean he still won them right? #TomBrady @patriots",
                        "from": 
                            "username": "k_aus32",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_39840771_75sq_1390431094.jpg",
                            "id": "39840771",
                            "full_name": "k_aus32"
                        ,
                        "id": "668845703585318559"
                    ,
                    
                        "created_time": "1393952673",
                        "text": "@heres_jonni9",
                        "from": 
                            "username": "allyson21lautner",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_184895764_75sq_1393107648.jpg",
                            "id": "184895764",
                            "full_name": "Allyson ????"
                        ,
                        "id": "668845962264823470"
                    ,
                    
                        "created_time": "1393952694",
                        "text": "Let's go !",
                        "from": 
                            "username": "tom12terrific",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_421023272_75sq_1393644166.jpg",
                            "id": "421023272",
                            "full_name": "Andrew Estrada"
                        ,
                        "id": "668846135581853361"
                    ,
                    
                        "created_time": "1393952856",
                        "text": "♡",
                        "from": 
                            "username": "in_neverland74",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_181245582_75sq_1391928288.jpg",
                            "id": "181245582",
                            "full_name": "Karen????"
                        ,
                        "id": "668847491935880949"
                    ,
                    
                        "created_time": "1393952914",
                        "text": "Follow for patriots pics daily!! (Ifollowback)",
                        "from": 
                            "username": "ne_patriots_fanpage__",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_983242248_75sq_1391989748.jpg",
                            "id": "983242248",
                            "full_name": "New England Patriots Fanpage"
                        ,
                        "id": "668847980295472912"
                    ,
                    
                        "created_time": "1393952952",
                        "text": "Best ever; period.  Let's see anyone win a ring with the humps he's had to work with, (except Randy).",
                        "from": 
                            "username": "calidoso76",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_1101426299_75sq_1392654362.jpg",
                            "id": "1101426299",
                            "full_name": "calidoso76"
                        ,
                        "id": "668848301545604900"
                    ,
                    
                        "created_time": "1393953005",
                        "text": "Shit just because brady hasn't won a ring since 04 don't mean a thing....one more and he'll have 6.....the most superbowl wins than ANY quarterback EVER. @patriots",
                        "from": 
                            "username": "inkandartsosick",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_260242163_75sq_1363337609.jpg",
                            "id": "260242163",
                            "full_name": "Eric Hughes"
                        ,
                        "id": "668848744304723771"
                    ,
                    
                        "created_time": "1393953023",
                        "text": "????????????",
                        "from": 
                            "username": "bvsed_papi_",
                            "profile_picture": "http://images.ak.instagram.com/profiles/profile_408657565_75sq_1393905141.jpg",
                            "id": "408657565",
                            "full_name": "Abel Valle™"
                        ,
                        "id": "668848894913791811"
                    
                ]
            ,
            "filter": "Lo-fi",
            "created_time": "1393949267",
            "link": "http://instagram.com/p/lIHd-_v8Uj/",
            "likes": 
                "count": 13685,
                "data": [
                    
                        "username": "dollathebarber",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_219503241_75sq_1373905843.jpg",
                        "id": "219503241",
                        "full_name": "dollathebarber"
                    ,
                    
                        "username": "emastro23",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_21122956_75sq_1388823730.jpg",
                        "id": "21122956",
                        "full_name": "Eddie Mastrocola"
                    ,
                    
                        "username": "pat_fan99",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_304601453_75sq_1377084414.jpg",
                        "id": "304601453",
                        "full_name": "Timothy Smith"
                    ,
                    
                        "username": "___adam___q",
                        "profile_picture": "http://images.ak.instagram.com/profiles/profile_3694047_75sq_1367384028.jpg",
                        "id": "3694047",
                        "full_name": "Adam Quinonez"
                    
                ]
            ,
            "images": 
                "low_resolution": 
                    "url": "http://distilleryimage10.s3.amazonaws.com/1c67f514a3b711e383121299eef1f922_6.jpg",
                    "width": 306,
                    "height": 306
                ,
                "thumbnail": 
                    "url": "http://distilleryimage10.s3.amazonaws.com/1c67f514a3b711e383121299eef1f922_5.jpg",
                    "width": 150,
                    "height": 150
                ,
                "standard_resolution": 
                    "url": "http://distilleryimage10.s3.amazonaws.com/1c67f514a3b711e383121299eef1f922_8.jpg",
                    "width": 640,
                    "height": 640
                
            ,
            "users_in_photo": [],
            "caption": 
                "created_time": "1393949267",
                "text": "#tb12",
                "from": 
                    "username": "patriots",
                    "profile_picture": "http://images.ak.instagram.com/profiles/profile_1939080_75sq_1385924433.jpg",
                    "id": "1939080",
                    "full_name": "New England Patriots"
                ,
                "id": "668817391815214218"
            ,
            "user_has_liked": false,
            "id": "668817391496447267_1939080",
            "user": 
                "username": "patriots",
                "website": "",
                "profile_picture": "http://images.ak.instagram.com/profiles/profile_1939080_75sq_1385924433.jpg",
                "full_name": "New England Patriots",
                "bio": "",
                "id": "1939080"
            
        ,
        
            "attribution": null,
            "videos": 
                "low_resolution": 
                    "url": "http://distilleryimage4.s3.amazonaws.com/2cb7114aa3b511e3a3e312f545262070_102.mp4",
                    "width": 480,
                    "height": 480
                ,
                "standard_resolution": 
                    "url": "http://distilleryimage4.s3.amazonaws.com/2cb7114aa3b511e3a3e312f545262070_101.mp4",
                    "width": 640,
                    "height": 640
                
            
        
    ]

【问题讨论】:

哪一行抛出异常? var arr = JsonConvert.DeserializeObject(response.Content); 尝试解析内容 你试过只使用 JObject.Parse() 吗? @Nilesh 请查看我更新的问题 【参考方案1】:

根据您的 JSON 响应(我已从 jsonlint.com 出于验证目的对其进行了更新),似乎 json 数据是对象类型而不是数组类型。因此,在对 JSON 响应进行适当分类后,您更新的代码可能会再次更新,如下所示:

client.ExecuteAsync(request, response =>
    
        RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(response.Content);
        foreach (Datum obj in rootObject.data)
        
            var Name = obj.user.full_name;
            var Caption = obj.caption.text;
            var picURL = obj.images.low_resolution.url;

            System.Console.WriteLine("Name of " + Name + ", Caption of " + Caption + ", and picurl of " + picURL);
        
    
);

您可能从您的 JSON 响应中派生的类(如下所示)是从 json2csharp.com 生成的

public class RootObject

    public Pagination pagination  get; set; 
    public Meta meta  get; set; 
    public List<Datum> data  get; set; 


public class Datum

    public object attribution  get; set; 
    public List<string> tags  get; set; 
    public string type  get; set; 
    public object location  get; set; 
    public Comments comments  get; set; 
    public string filter  get; set; 
    public string created_time  get; set; 
    public string link  get; set; 
    public Likes likes  get; set; 
    public Images images  get; set; 
    public List<object> users_in_photo  get; set; 
    public Caption caption  get; set; 
    public bool user_has_liked  get; set; 
    public string id  get; set; 
    public User user  get; set; 
    public Videos videos  get; set; 


public class Videos

    public LowResolution2 low_resolution  get; set; 
    public StandardResolution2 standard_resolution  get; set; 


public class StandardResolution2

    public string url  get; set; 
    public int width  get; set; 
    public int height  get; set; 


public class LowResolution2

    public string url  get; set; 
    public int width  get; set; 
    public int height  get; set; 


public class User

    public string username  get; set; 
    public string website  get; set; 
    public string profile_picture  get; set; 
    public string full_name  get; set; 
    public string bio  get; set; 
    public string id  get; set; 


public class Caption

    public string created_time  get; set; 
    public string text  get; set; 
    public From from  get; set; 
    public string id  get; set; 


public class From

    public string username  get; set; 
    public string profile_picture  get; set; 
    public string id  get; set; 
    public string full_name  get; set; 


public class Images

    public LowResolution low_resolution  get; set; 
    public Thumbnail thumbnail  get; set; 
    public StandardResolution standard_resolution  get; set; 


public class StandardResolution

    public string url  get; set; 
    public int width  get; set; 
    public int height  get; set; 


public class Thumbnail

    public string url  get; set; 
    public int width  get; set; 
    public int height  get; set; 


public class LowResolution

    public string url  get; set; 
    public int width  get; set; 
    public int height  get; set; 


public class Likes

    public int count  get; set; 
    public List<Datum2> data  get; set; 


public class Datum2

    public string username  get; set; 
    public string profile_picture  get; set; 
    public string id  get; set; 
    public string full_name  get; set; 


public class Comments

    public int count  get; set; 
    public List<object> data  get; set; 


public class Meta

    public int code  get; set; 


public class Pagination

    public string next_url  get; set; 
    public string next_max_id  get; set; 

【讨论】:

感谢您的帮助!但是最后一件事,我如何将它显示到 UITableView 上?顺便说一句,所有现有代码都可以正常工作。 也欢迎您!很高兴知道它对你有用。顺便说一句,你可以用你的新查询开始一个单独的线程,这样你就可以快速得到你想要的答案。祝你好运! @Askolein 也欢迎您。您也可以尝试jsonlint 进行 json 验证和缩进格式化。

以上是关于无法加载 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

无法使用新的json数据重新加载JQGrid

无法加载 JSON 数据以在 ListView 中显示

使用 ajax json 加载数据后,引导数据表无法正常工作

无法在 BlackBerry Cascades 中通过 https 加载 JSON 数据源

无法将完整数据从 json 文件加载到数据框中

表单 POST 无法使用巨大的 json 字符串;还有其他方法可以加载包含大量 POST 数据的页面吗?