0

以下代码将以下内容打印为输入,但我想将此 JSON 字符串作为输入直接传递给 parse 方法(最好作为字符串参数)。我该怎么做?

{"val1":"v1","val2":"v2"}

import com.google.gson.*;

public class ParseJSON {

    String val1;
    String val2;
    transient String val3;

    public static void main(String[] args) {
        Gson gson = new GsonBuilder().create();
        ParseJSON parseJson = new ParseJSON();
        parseJson.val1 = "v1";
        parseJson.val2 = "v2";
        parseJson.val3 = "v3";
        String requestBody = gson.toJson(parseJson);
        System.out.println(requestBody);

        JsonParser parser = new JsonParser();
        // JsonArray array = parser.parse(requestBody).getAsJsonArray();
    }
}
4

2 回答 2

2

正在创建的 JSON 将被视为 JSON 对象,而不是数组。要正确解析它,您需要调用:

JsonObject object = parser.parse(requestBody).getAsJsonObject();

JSON 数组看起来更像这样:

[{"va1": "v1", "val2": "v2", "val3": "v3"}, {"val4": "v4", "val4": "v5", "val5": "v6"}]

这是一个包含两个 JSON 对象的 JSON 数组。JSON 数组与您在 Java 中看到的数组具有相似的样式,它们有[ ]括号并包含一个逗号分隔的对象/数组/基元列表。

此外,您也可以像这样解析它:

JsonElement element = parser.parse(requestBody);

一旦你有了一个JsonElement,你就可以调用类似的方法,isJsonArray()或者isJsonObject()找出String你解析的顶级 JSON 元素是什么。

于 2013-01-24T05:56:34.993 回答
0
*You should do that in a following code for your request*

        static String val1 = "v1";
        static String val2 = "v2";
        transient String val3;

        public static void main(String[] args) {
            JSONArray arrayTable = new JSONArray(); 
            JSONObject node = new JSONObject();  
            node.put("val1", val1);
            node.put("val2", val2);
            arrayTable.add(node);
            System.out.println(arrayTable);

        }

**Dependency lib**:
 <dependency>
    <groupId>json</groupId>
    <artifactId>json</artifactId>
    <version>2.3</version>
</dependency>

<dependency>
    <groupId>net.sf.ezmorph</groupId>
    <artifactId>ezmorph</artifactId>
    <version>1.0.6</version>
</dependency>
于 2013-01-24T06:04:23.773 回答