我将以下字符串传递给服务器:
{
"productId": "",
"sellPrice": "",
"buyPrice": "",
"quantity": "",
"bodies": [
{
"productId": "1",
"sellPrice": "5",
"buyPrice": "2",
"quantity": "5"
},
{
"productId": "2",
"sellPrice": "3",
"buyPrice": "1",
"quantity": "1"
}
]
}
的有效json
我想获取body数组字段。
我就是这样做的:
Gson gson = new Gson();
JsonObject object = gson.toJsonTree(value).getAsJsonObject();
JsonArray jsonBodies = object.get("bodies").getAsJsonArray();
但是在第二行我得到了下面的例外情况:
HTTP Status 500 - Not a JSON Object: "{\"productId\":\"\",\"sellPrice\":\"\",\"buyPrice\":\"\",\"quantity\":\"\",\"bodies\":[{\"productId\":\"1\",\"sellPrice\":\"5\",\"buyPrice\":\"2\",\"quantity\":\"5\"},{\"productId\":\"2\",\"sellPrice\":\"3\",\"buyPrice\":\"1\",\"quantity\":\"1\"}]}"
如何妥善处理?
答案 0 :(得分:9)
此方法将指定对象序列化为等效对象 表示为
的树JsonElement
s。
也就是说,它基本上是
String jsonRepresentation = gson.toJson(someString);
JsonElement object = gson.fromJson(jsonRepresentation, JsonElement.class);
Java String
被转换为JSON字符串,即。一个JsonPrimitive
,而不是JsonObject
。换句话说,toJsonTree
正在解释您作为JSON字符串而不是JSON对象传递的String
值的内容。
你应该使用
JsonObject object = gson.fromJson(value, JsonObject.class);
直接将您的String
转换为JsonObject
。
答案 1 :(得分:8)
我之前使用了https://stackoverflow.com/a/15116323/2044733中所述的parse
方法,但它已经有效了。
实际代码看起来像
JsonParser jsonParser = new JsonParser();
jsonParser.parse(json).getAsJsonObject();
从the docs开始,您似乎遇到了错误描述,其中您认为toJsonTree
对象的类型不正确。
以上代码相当于
JsonObject jelem = gson.fromJson(json, JsonElement.class);
如此处的另一个答案和链接线程中所述。
答案 2 :(得分:-1)
JsonArray jsonBodies = object.getAsJsonArray(“bodies”);