2017-02-24 10 views
0

Ich arbeite Code, aber es ist etwas scheitern: meine JSON-Antwort ist eine gültige JSON, wie ich es auf JSOnLint.com überprüft.JSON Parsing Problem mit Code

So, hier ist das Stück Code, die Mühe machen wird

$.post("items.cfm",{"term":request.term}) 
    .done(function(data){ 
     alert(data); 
     try{ 
      var obj = $.parseJSON(data), 
      values = []; 
      alert(obj[x].id.split('~')[3]); 

      for(var x = 0; x < obj.length; x++){ 
       values.push({ 
       "label":obj[x].text, "value":obj[x].id, 
       "price":obj[x].id.split('~')[3] 
       }); 
      } 
      response(values); 
     } catch(e) { 
      alert(e); 
     } 
}) 

Wenn ich meine JSON mit folgendem beginnen:

{ 
    "text": "Blue CPR Pocket Mask", 
    "id": "128177000003239005~Blue~YES~10.75" 
}, { 
    "text": "CPR Face Shields", 
    "id": "128177000000138987~CPs~YES~41.83" 
} 

... es wirft einen Fehler:

SyntaxError: Unexpected token , in JSON at position

... aber wenn ich beginne mit:

[{ 
     "text": "Blue CPR Pocket Mask", 
     "id": "128177000003239005~Blue~YES~10.75" 
    }, { 
     "text": "CPR Face Shields", 
     "id": "128177000000138987~CPs~YES~41.83" 
    } 
] 

ein gültiges JSON, aber es schlägt mit meinem Code fehl, da ich versuche, es zu analysieren und seinen Wert zu verwenden, aber es sagt mir, dass id nicht definiert ist. Also, was soll ich tun, damit es funktioniert?

Update # 1

I-Methode des gefolgt jedem und ausprobiert und es fing an, mir jetzt den folgenden Fehler

TypeError: Cannot use 'in' operator to search for '4592' in 
+0

Sie haben zwei JSON-Objekte, nicht eins. Behandle sie also als zwei verschiedene oder kombiniere sie als ein Array oder innere Objekte eines anderen Objekts. Außerdem, warum möchten Sie analysieren? Es ist schon JSON, oder? – RaR

+0

Was gibt 'console.log (obj)' in Ihrem Versuch zurück? –

Antwort

0

Sie sollten es nicht, wie es in der Anordnung werden Parsen. Auch die Variable 'x', die Sie in der Alert-Funktion verwenden, befindet sich über der for-Schleife. Aus diesem Grund erhalten Sie den Fehler "id" ist nicht definiert.

Auch das funktionierte für mich.

var data = [{ 
      "text": "Blue CPR Pocket Mask", 
      "id": "12817700000323900" 
     }, 
     { 
      "text": "CPR Face Shields", 
     "id": "128177000000138987" 
     } 
     ] 
     function test1(){ 
      var obj = data 
      values = []; 
      console.log(obj) 

      for(var x = 0; x < obj.length; x++){ 
       values.push({"label":obj[x].text, "value":obj[x].id, "price":obj[x].id.split('~')[3]}); 
      } 
     } 
     test1() 
0

Versuchen Sie, eine jede Schleife verwenden, Ihre json ist gültig, wenn Sie [], weil Sie mehrere Objekt, das in einem Array

var data = [{ 
 
    "text": "Blue CPR Pocket Mask", 
 
    "id": "128177000003239005~Blue~YES~10.75" 
 
}, { 
 
    "text": "CPR Face Shields", 
 
    "id": "128177000000138987~CPs~YES~41.83" 
 
}]; 
 
var values = []; 
 
$.each(data, function(i, obj) { 
 

 
    values.push({ 
 
    "label": obj.text, 
 
    "value": obj.id, 
 
    "price": obj.id.split('~')[3] 
 
    }); 
 
}); 
 
console.log(values)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Stellen Sie sicher sein, müssen Sie empfangen ein gültiges JSON Objekt/String

+0

Hallo, ich habe den Code geändert und jetzt bekomme ich diesen 'TypeError: Kann 'In' Operator nicht verwenden, um nach '4592' in' zu suchen – Hane

-1

Es ist falsch JSON:

{},{}; 

Es ist richtig, JSON:

[{},{}]; 

ODER

{}; 
0

"x" in alert(obj[x].id.split('~')[3]) nicht definiert ist. es in der Schleife Put Problem lösen kann:

for(var x = 0; x < obj.length; x++){ 
     alert(obj[x].id); 
     values.push({ 
     "label":obj[x].text, "value":obj[x].id, 
     "price":obj[x].id.split('~')[3] 
     }); 
    } 
0

Die Frage ist nur, weil der Index des obj Variable.

So, hier ist die Lösung:

$.post("items.cfm",{"term":request.term}) 
    .done(function(data){ 
     alert(data); 
     try{ 
      var obj = $.parseJSON(data), 
      values = []; 
      //alert(obj[x].id.split('~')[3]); 
      //this guy is creating the issue. 
      //since he's out of the loop where x is declared(out of scope) 
      //Put it inside the loop and thins will work fine. 

      for(var x = 0; x < obj.length; x++){ 
       alert(obj[x].id.split('~')[3]); //Moved here(x is defined in the for loop)! 
       values.push({ 
       "label":obj[x].text, "value":obj[x].id, 
       "price":obj[x].id.split('~')[3] 
       }); 
      } 
      response(values); 
     } catch(e) { 
      alert(e); 
     } 
}) 

Hoffnung, das hilft.

1

In Ihrem Code:

alert(obj[x].id.split('~')[3]); 

diese Linie führt zu einem Fehler:

x is not defined 

bewegen Sie diese Zeile in for-Schleife es funktioniert.