2017-05-16 3 views
0

Ich habe ein Cordova android Plugin für meine Bibliothek entwickelt. Die Bibliothek wird zum Senden von Ereignissen über verschiedene verbundene Geräte verwendet.Wie wird der JSON korrekt analysiert?

JS-Schnittstelle empfängt ein JSON von der Java-Seite. Was ich tun möchte ist, dies vor dem Erreichen der Anwendung zu analysieren, damit der Entwickler es direkt als JS-Objekt verwenden kann. Als ich versuchte, den JSON in der JS-Oberfläche meines Plugins zu analysieren, stößt ich auf Probleme. Unten ist ein Beispiel:

von JS Schnittstelle empfangen:

{"key":"name","data":"{\"name\":\"neil\",\"age\":2,\"address\":\"2 Hill St\"}"} 

Nachdem in JS-Schnittstelle Parsen:

Object {key: "name", data: "{"name":"neil","age":2,"address":"2 Hill St"}"} 
data:"{"name":"neil","age":2,"address":"2 Hill St"}" 
key:"name" 
__proto__:Object 

Wie Sie sehen können, wenn diese Daten die App erreicht und der Entwickler die Zugriffe Daten:

eventData.key = name; 
eventData.data = {"name":"neil","age":2,"address":"2 Hill St"}; 
eventData.data.name = undefined 

Wie kann ich die inneren Daten auch in meiner JS-Schnittstelle analysieren, so dass die Entwicklung oper kann direkt zugreifen. Im obigen Fall muss er eventData.data analysieren, um auf die Eigenschaften zugreifen zu können. Ich möchte nicht, dass dies passiert und ich möchte dies in der JS-Schnittstelle selbst tun.

Bitte beachten Sie, dass eventData viele Eigenschaften haben kann und daher vor dem Übergang in die App richtig analysiert werden sollte.

Ich bin neu in Javascript und daher finden es schwierig, das Problem zu verstehen.

+2

'eventData.data = JSON.parse (eventData.data)' – Phil

+0

Empfangen von JS Schnittstelle es mir sieht, dass es ein JSON-Objekt empfängt aber die Eigenschaft data enthält eine zu analysierende Zeichenkette – MFAL

+2

'Received by JS interface' - der von JavaScript empfangene JSON ist eindeutig nicht korrekt formatiert (in Bezug auf die Daten, die er darzustellen versucht) - behebe den SENDER dieses Mülls JSON –

Antwort

0

Es scheint, dass der zurückgegebene JSON eine Zeichenfolge für die Dateneigenschaft enthält.

var response = {"key":"name","data":"{\"name\":\"neil\",\"age\":2,\"address\":\"2 Hill St\"}"}; 
 
    //Parse the data 
 
    var jsonData = JSON.parse(response.data); 
 
    
 
    console.log(jsonData.name); //neil 
 
    console.log(jsonData.age); //2 
 
    console.log(jsonData.address);//"2 Hill St"

0

Wie andere erwähnt, haben Sie JSON.parse (eventData.data), da die Daten kommt als String zu tun. Sie müssen schauen, warum das passiert. Die inneren Daten könnten auf diese Weise gespeichert werden, in einigen Fällen ihre Gültigkeit als flaches Objekt in db zu speichern oder es wird zweimal irrtümlich Zeichenfolge:

var innerdata = JSON.stringify({ name: "neil" }); 
var eventData = JSON.stringify({ key: "name", data: innerdata }); 

auf Ihre empfangenen Zeichenfolge entsprechen würde.

korrekte Art und Weise in erster Linie zu stringify wäre:

var innerdata = { name: "neil" }; 
var eventData = JSON.stringify({ key: "name", data: innerdata }); 
Verwandte Themen