2016-07-06 66 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