2016-10-03 5 views
0

Ich versuche, API-Daten zu analysieren, die ich über Ajax erhalte. Ich habe keine Kontrolle über die API-JSON-Struktur. Wenn ich versuche, es zu analysieren, mit diesem Code ich diese Fehlermeldung erhalten:Parsen von JSON über Javascript Fehler erhalten: json.parse: unerwartetes Zeichen

json.parse:unexpected character 

und keine Datenausgabe auf divs.I letzten 2 Tage damit verbringen, konnte es nicht reparieren. Könnten Sie mir sagen, wie Jungs it.Thanks zu beheben

data.html Inhalt:

"[\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 
+2

Ihre json entfernen unwirksam sein. Validiere es hier jsonlint.com –

+0

Kannst du posten, was die 'console.log (json);' ausspuckt? Aber yeah @Santosh hat die richtige Idee - überprüfen Sie, was mit Ihrem JSON ungültig ist. – aug

+0

Schlecht formatierte JSON. – Anuga

Antwort

0

Schließlich löste ich das Problem, indem die beiden Zitate entfernen, \ r \ n und einige andere unnötigen Dinge mit folgenden Methode:

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("\",", ""); 
-1

Ihr JSON sieht gut aus, das Problem wird durch die Ersetzungsmethode verursacht. Sie können einfach die Daten wie folgt analysieren:

var jsonResponse = JSON.parse(data); 

jsonResponse ist ein Json-Array, das Sie tun können, was man will.

Hoffe diese Hilfe.

0

Bei Verwendung eines gut formatierten JSON-Eingangs. Es funktionierte: Example on 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 
}] 

Zitate bleiben kann, aber die zusätzliche \ r \ n entfernt werden muss.

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

Sollte genug sein.

+0

, so dass Sie vorschlagen, dass ich die JSON-Antwort als neue Variable? Wie formatieren Sie die JSON wie Sie es getan haben, wenn ich die JSON-Daten über ajax? data = data.replace ("\\ r \\ n", ""); habe das \ r \ n in meinem Fall nicht entfernt – user1788736

0

Es funktioniert, wenn das Ergebnis aus dem AJAX-Aufruf zweimal analysiert wird, ich weiß nicht wirklich den Grund dahinter, aber für mich sieht es so aus, als entfernt es alle unnötigen Leerzeichen und bildet die JSON-Zeichenfolge ordnungsgemäß beim ersten Parse Funktionsaufruf, und wenn die Syntaxanalysefunktion erneut aufgerufen wird, konvertiert sie sie in ein JavaScript-Objekt.

Der js Code

$(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); 
     } 
    }); 
}); 

Hier ist die plunker link

0

Das Problem meist mit parse(), die JSON(received as JSON),

erwartet

bitte überprüfen Sie mit JSON.stringify(data). Sie müssen auch die \n , \r...

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

Verwandte Themen