【问题标题】:JSON.parse returning errorJSON.parse 返回错误
【发布时间】:2016-12-09 13:01:35
【问题描述】:

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

{"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;
} 

【问题讨论】:

  • 介意给我们看一下解析代码吗?
  • @TheLazySloth 更新了它。返回的基本上是一个字符串化的数组。
  • 就是用​​逗号写的3个对象..应该是数组什么的..jsfiddle.net/c8743h70
  • 在 JSONLint.com 输入 JSON 并显示错误。将其添加到 [ ] 中,错误消失了。试一试?
  • @echonax 问题是......我很确定它们在一个数组中,我会用我的调用函数更新

标签: javascript json angular typescript


【解决方案1】:

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

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]

【讨论】:

  • 当我 console.log(data) 返回我[Object {id="2", ...}, Object {id="3", name="(+)-Biotin 4-Nitrophenyl ester", ...}, Object {id="4", ...}] 所以它是 JSON 格式,但由于某种原因我无法访问它。
【解决方案2】:

把调用函数改成这样:

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

    }).responseText;
} 

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

【讨论】:

    【解决方案3】:
    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");
                });
    
            });
    

    输出:

    【讨论】:

    • 原来是因为我在做ajax,所以显示的时候变量为null:\
    • 使用 jQuery Ajax
    • 是的,我回答了
    猜你喜欢
    • 2015-11-12
    • 2019-12-09
    • 2018-03-15
    • 2016-01-09
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多