javax.json产生了难以理解的json

时间:2016-07-06 15:48:03

标签: java json node.js jersey

我有一个带有两个属性的Java类,我使用这个方法转换为json。我跟着另一个回答: Return JSONArray instead of JSONObject, Jersey JAX-RS

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();
}

我得到的String被封装到字符串的ArrayList中,并通过HTTP发送(我使用Jersey):

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 个答案:

答案 0 :(得分:1)

您的Java客户端是否编码JSON两次?我注意到你正在将一个json字符串添加到ArrayList中,但是你应该将对象添加到ArrayList中,然后将整个字符串整理一次。

尝试在JSON.parse()上再次使用jsonRepuesta,看看是否能让您获得正在寻找的内容。或者,注销typeof jsonRepuesta - 看起来它仍然是一个字符串。

另请参阅here