Gson:不是JSON对象

时间:2015-06-08 19:09:54

标签: java json gson

我将以下字符串传递给服务器:

{
    "productId": "",
    "sellPrice": "",
    "buyPrice": "",
    "quantity": "",
    "bodies": [
        {
            "productId": "1",
            "sellPrice": "5",
            "buyPrice": "2",
            "quantity": "5"
        },
        {
            "productId": "2",
            "sellPrice": "3",
            "buyPrice": "1",
            "quantity": "1"
        }
    ]
}

这是http://jsonlint.com/

的有效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\"}]}"

如何妥善处理?

3 个答案:

答案 0 :(得分:9)

Gson#toJsonTree javadoc

  

此方法将指定对象序列化为等效对象   表示为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”);