2016-07-06 63 views
1

我有一個Java類,有兩個atrributes,我使用這種方法轉換爲json。我跟着這個其他答案: Return JSONArray instead of JSONObject, Jersey JAX-RSjavax.json產生難以理解的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(); 
} 

我得到的字符串被封裝成字符串的ArrayList,並通過HTTP(我用的球衣)發送:

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

如何過,節點客戶端使用無法正確解析它:它獲取數組部分,完美地訪問元素。但不是JSON鍵和值; 返回undefined:

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

返回:

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

什麼是失敗?如果有幫助,使用wireshark捕獲數據包會將陣列成員顯示爲字符串

回答

1

您的java客戶端是否對兩次JSON編碼?我注意到你正在向一個ArrayList添加json字符串,但你應該真的把對象添加到ArrayList中,然後將整個事件串起來一次。

請嘗試在jsonRepuesta上再次使用JSON.parse(),然後查看是否獲得了您要查找的內容。或者,註銷一個typeof jsonRepuesta - 看起來它仍然是一個字符串。

另外,參見here

+1

關鍵是:製作和ArrayList 並將toString附加到整個數組。實際上,json被編碼了兩次。 – ledermauss