2016-07-06 6 views
1

Ich habe eine Java-Klasse mit zwei attributes, die ich mit dieser Methode in json umwandeln. Ich folgte dieser andere Antwort: Return JSONArray instead of JSONObject, Jersey JAX-RSjavax.json erzeugt unverständliches json

public String toString(){ 
    // takes advantage of toString() implementation to format {"a":"b"} 
    JsonObject json = Json.createObjectBuilder() 
      .add("sentence", sentence) 
      .add("category", category).build(); 
    return json.toString(); 
} 

Der String I in eine Arraylist von Strings eingekapselt zu bekommen, und über HTTP gesendet (Ich verwende Jersey):

return Response.status(200).entity(response).build(); 

Wie auch immer, der Knoten client is use kann es nicht richtig parsen: es bekommt den Array-Teil, greift auf die Elemente perfekt zu. Aber nicht die JSON-Schlüssel und Werte; kehrt undefined:

jsonRespuesta = JSON.parse(body)[0]; 
console.log(jsonRespuesta); 
console.log("Frase: " +jsonRespuesta.sentence + " ,Categoria: " + jsonRespuesta.category); 

Returns:

{"sentence":"hola","category":"2"} 
Frase: undefined ,Categoria: undefined 

Was versagt hat? Wenn es hilft, zeigt das Erfassen der Pakete mit wireshark die Array-Mitglieder als Strings an.

Antwort

1

Codiert Ihr Java-Client den JSON zweimal? Ich habe bemerkt, dass Sie JSON-Strings zu einer ArrayList hinzufügen, aber Sie sollten wirklich Objekte zur ArrayList hinzufügen und dann das ganze Ding einmal stringieren.

Versuchen Sie erneut JSON.parse() auf jsonRepuesta und sehen, ob das Sie bekommen, was Sie suchen. Alternativ loggen Sie sich eine typeof jsonRepuesta - sieht aus wie es immer noch eine Zeichenfolge ist.

Siehe auch here.

+1

Der Schlüssel war das: machen und ArrayList und die toString auf das gesamte Array. Der JSON wurde tatsächlich zweimal kodiert. – ledermauss