解析JSON通过javascript得到错误:JSON.解析:意想不到的人物

Parsing JSON via javascript getting error: json.parse:unexpected character

本文关键字:解析 JSON 意想不到 人物 通过 javascript 错误      更新时间:2023-09-26

我试图解析我通过ajax接收的API数据。我无法控制api json结构。当我尝试使用此代码解析它时,我得到这个错误:

json.parse:unexpected character

,div上没有数据输出。我花了两天时间也没能修好它。你们能告诉我怎么修吗。由于

研究司内容:

"['r'n  {'r'n    '"itemID'": '"1'",'r'n    '"itemTitle'": '"First'",'r'n    '"itemText'": '"first one'",'r'n    '"ThumbUrl'": '"http://somesite.com/1.jpg'",'r'n    '"itemContent'": null'r'n  },'r'n  {'r'n    '"itemID'": '"2'",'r'n    '"itemTitle'": '"Second'",'r'n    '"itemText'": '"  second one'",'r'n    '"ThumbUrl'": '"http://somesite/2.jpg'",'r'n    '"itemContent'": null'r'n  }'r'n]"
javascript:

  <html>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
function ajax() {
$.get("./data.html", function(data){   
data = data.replace("'"[", "["); 
data = data.replace("]'"", "]"); 
$("#area1").text(data);
// parse JSON response
var json = $.parseJSON(data);
console.log(json);
    // then loop the single items
    for(i in json)
    {
       // create HTML code
       var div = "<div class='"image'">'n" + 
       "<a href='"javascript:dofunction('./test.php?title=" + json[i].itemTitle + "&TargetUrl=http://somesite.com/" + json[i].itemID + "')'">'n" +
       "<img src='""+ json[i].ThumbUrl +"'" alt='"..'" />'n" +
       "</a>'n" +
       "</div>'n";
      $("#myDiv").append(div);
    }
});
}
</script>
<body>
<button onclick="ajax()">test</button>
<br>orginal data:<br>
<textarea id="area1" rows="4" cols="50" ></textarea>
<div id='myDiv'></div>
</html>

console.log (json):

JSON.parse: unexpected character
https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js
Line 4

使用格式良好的JSON输入时。jsFiddle

示例
[{
    "itemID": "1",
    "itemTitle": "First",
    "itemText": "first one",
    "ThumbUrl": "http:'/'/somesite.com'/1.jpg",
    "itemContent": null
 },{
    "itemID": "2",
    "itemTitle": "Second",
    "itemText": "second one",
    "ThumbUrl": "http:'/'/somesite'/2.jpg",
    "itemContent": null
}]

引号可以保留,但是额外的'r'n需要删除。

data = data.replace("''r''n", "");

最后我用下面的方法去掉了引号,'r'n和其他一些不必要的东西,解决了这个问题:

data = data.replace("'"[", "["); 
data = data.replace("]'"", "]");

data = data.replace(/''r''n/g, ""); 
data = data.replace(/''/g, "");
data = data.replace("n'"", ""); 
data = data.replace("'")", ""); 
data = data.replace("'",", ""); 

当AJAX调用的结果被解析两次时,我真的不知道背后的原因,但对我来说,它看起来像它删除了所有不必要的空格,并在第一次解析函数调用时正确形成JSON字符串,然后当解析函数再次调用时,它将其转换为JavaScript对象。

js代码

$(document).ready(function() {
    $.get("./data.html", function(data, status) {
        $("#area1").text(data);
        // parse JSON response
        var json = JSON.parse(JSON.parse(data));
        console.log(json);
        // then loop the single items
        for (i in json) {
            // create HTML code
            var div = "<div class='"image'">'n" +
                "<a href='"javascript:dofunction('./test.php?title=" + json[i].itemTitle + "&TargetUrl=http://somesite.com/" + json[i].itemID + "')'">'n" +
                "<img src='"" + json[i].ThumbUrl + "'" alt='"..'" />'n" +
                "</a>'n" +
                "</div>'n";
            $("#myDiv").append(div);
        }
    });
});

这是活塞链接

主要是parse()的问题,它期望JSON(received as JSON)

请与JSON.stringify(data)核对。您还需要删除'n , 'r...

data = data.replace(/(?:''[rn]|['r'n]+)+/g, "")

您的JSON看起来很好,问题是由替换方法引起的。您可以简单地像这样解析数据:

var jsonResponse = JSON.parse(data);

jsonResponse是一个json数组,你可以对它做任何你想做的事情。