JSON.parse返回错误

时间:2016-12-09 04:09:48

标签: javascript json angular typescript

所以这是我的JSON.stringify' d在我尝试运行JSON.parse之前返回

{"id":"2","name":"<small>L</small>(+)-Amethopterin Hydrate","class":"6.1","subclass":"","packing_group":"III","un":"2811","cas":"133073-73-1","poisons":"","hazardous":"Yes","restricted":"No","epa":"","added_by":"0","carcinogen":null},
{"id":"3","name":"(+)-Biotin 4-Nitrophenyl ester","class":"","subclass":"","packing_group":"","un":"","cas":"33755-53-2","poisons":"","hazardous":"No","restricted":"No","epa":"","added_by":"0","carcinogen":null},
{"id":"4","name":"(+)-Biotin N-hydroxysuccinimide ester","class":"","subclass":"","packing_group":"","un":"","cas":"35013-72-0","poisons":"","hazardous":"No","restricted":"No","epa":"","added_by":"0","carcinogen":null}

当我尝试JSON.parse时,我得到Unexpected end of JSON input。而且我无法将其作为JSON对象访问,因为它会在此范围内显示can't define id或其他内容。



JSON.parse(this.searchService.searchJson(this.php_url));

this.searchService.searchJson(this.php_url)基本上就是我的JSON字符串。如上所述给出了错误。



此外,如果我只是尝试对3个元素中的1个进行字符串化,它会给我Unexpected token u in JSON at position 0



通话功能:

searchJson(url: any): any 
{   
    let items: any = []; 
    let new_data: any = []; 
    $.getJSON(url , 
        function(data)
        {   
            let temp_items: any = {}; 
            console.log(data);
            $.each(data, function (key, val)
            {   
                new_data.push(JSON.stringify(val));
            }); 
        }); 
    return new_data;
} 

3 个答案:

答案 0 :(得分:2)

你必须用[]包装它,因为那是一个对象数组:

const data = [{"id":"2","name":"<small>L</small>(+)-Amethopterin Hydrate","class":"6.1","subclass":"","packing_group":"III","un":"2811","cas":"133073-73-1","poisons":"","hazardous":"Yes","restricted":"No","epa":"","added_by":"0","carcinogen":null}, {"id":"3","name":"(+)-Biotin 4-Nitrophenyl ester","class":"","subclass":"","packing_group":"","un":"","cas":"33755-53-2","poisons":"","hazardous":"No","restricted":"No","epa":"","added_by":"0","carcinogen":null}, {"id":"4","name":"(+)-Biotin N-hydroxysuccinimide ester","class":"","subclass":"","packing_group":"","un":"","cas":"35013-72-0","poisons":"","hazardous":"No","restricted":"No","epa":"","added_by":"0","carcinogen":null}]

console.log(data);将返回[Object, Object, Object]

或者如果你想作为JSON字符串进行处理,你应该这样做:

const data = '[{"id":"2","name":"<small>L</small>(+)-Amethopterin Hydrate","class":"6.1","subclass":"","packing_group":"III","un":"2811","cas":"133073-73-1","poisons":"","hazardous":"Yes","restricted":"No","epa":"","added_by":"0","carcinogen":null}, {"id":"3","name":"(+)-Biotin 4-Nitrophenyl ester","class":"","subclass":"","packing_group":"","un":"","cas":"33755-53-2","poisons":"","hazardous":"No","restricted":"No","epa":"","added_by":"0","carcinogen":null}, {"id":"4","name":"(+)-Biotin N-hydroxysuccinimide ester","class":"","subclass":"","packing_group":"","un":"","cas":"35013-72-0","poisons":"","hazardous":"No","restricted":"No","epa":"","added_by":"0","carcinogen":null}]'

JSON.parse(data)也将返回[Object, Object, Object]

答案 1 :(得分:1)

将调用函数更改为:

searchAjax(url: any): any
{   
    let new_data: any;
    return $.ajax({
        url: url,
        type: 'post',
        dataType: "json", 
        async: false

    }).responseText;
} 

最可能的原因是我的变量是因为异步而我的变量在被调用时为空。

答案 2 :(得分:1)

file Nmae: self.json
    [
          {
            "id": "2",
            "name": "<small>L</small>(+)-Amethopterin Hydrate",
            "class": "6.1",
            "subclass": "",
            "packing_group": "III",
            "un": "2811",
            "cas": "133073-73-1",
            "poisons": "",
            "hazardous": "Yes",
            "restricted": "No",
            "epa": "",
            "added_by": "0",
            "carcinogen": null
          },
          {
            "id": "3",
            "name": "(+)-Biotin 4-Nitrophenyl ester",
            "class": "",
            "subclass": "",
            "packing_group": "",
            "un": "",
            "cas": "33755-53-2",
            "poisons": "",
            "hazardous": "No",
            "restricted": "No",
            "epa": "",
            "added_by": "0",
            "carcinogen": null
          },
          {
            "id": "4",
            "name": "(+)-Biotin N-hydroxysuccinimide ester",
            "class": "",
            "subclass": "",
            "packing_group": "",
            "un": "",
            "cas": "35013-72-0",
            "poisons": "",
            "hazardous": "No",
            "restricted": "No",
            "epa": "",
            "added_by": "0",
            "carcinogen": null
          }
        ]
     $(document).ready(function($) {
            $.ajax({
                url: 'self.json',
                type: 'GET',
                dataType: 'json',
            })
            .done(function(respose) {
                for (var i = 0; i < respose.length; i++) {
                    resText = respose[i].id+' '+respose[i].name+' '+ respose[i].class+' '+respose[i].subclass;
                    console.log(resText);
                };
            })
            .fail(function() {
                console.log("error");
            })
            .always(function() {
                console.log("complete");
            });

        });

<强>输出: enter image description here