使用GSON

时间:2019-09-23 19:25:13

标签: java json gson

我100%肯定已经被问了一百万遍了,但是我真的不确定如何正确地解决这个问题。我对JSON或序列化还没有做很多事情。

基本上,这就是我要使用GSON创建的内容:

{
    "wrapper" : [
        {
            "content": "loremipsum",
            "positions": [0,3]
        },
        {
            "content": "foobar",
            "positions": [7]
        },
        {
            "content": "helloworld"
        }
    ]
}

简而言之,我们为数组提供了一个字段,其中包含对象,对象本身包含两个字段,其中一个映射到字符串,另一个映射到另一个可以包含未知数量的整数或可以完全消失了。

我什至无法想象如何通过GSON获得此结果。到目前为止,我的想法是将所有内容都放在Map<String, List<Map<String, Object>>>野兽中并进行转换,但是该Object困扰我,因为在这种特殊情况下,它可以是String或List。可能会有强制转换,但这听起来像是一个愚蠢的复杂事情,如果我什至只是简单地在String.format()或类似类型中手动键入它,它看起来就会更简单。

有没有更简单的方法来处理这些东西?

3 个答案:

答案 0 :(得分:3)

我会为您的数据创建一些POJO类:

class MyData {
    private List<Data> wrapper;

    //getters setters constructors
}

class Data {
    private String content;
    private List<Integer> positions;

    //getters setters constructors
}

然后反序列化:

Gson gson = new Gson();
String json = //json here
MyData myData = gson.fromJson(myJson, MyData.class);

并用于序列化:

MyData myData = ...
String json = gson.toJson(myData);

另一种方法是使用JsonParser解析此结构并访问其元素:

JsonParser jsonParser = new JsonParser();
JsonElement jsonElement = jsonParser.parse(json);
JsonElement wrapperElement = jsonElement.getAsJsonObject().get("wrapper"); //access wrapper
JsonArray array = wrapperElement.getAsJsonArray(); // access array

答案 1 :(得分:0)

最好使用Pojo进行格式化。

class Wrapper{
 private List<Data> data;
 // geters, seters
}
class Data{
 private String content;
 private List<Integer> positions;
 // geters, seters
}

对于反序列化/重新实现,您可以使用Jackson

ObjectMapper mapper = new ObjectMapper();
Wrapper wriper = mapper.readValue(dataString, Wrapper.class);
String jsonString = mapper.writeValueAsString(wriper);

Gson

Gson gson = new Gson();
Wrapper wriper = gson.fromJson(dataString, Wrapper.class);
String json = gson.toJson(wriper);

答案 2 :(得分:0)

您可以将gson JsonElement用作包含JsonElement或JsonArray之类的JsonElement的容器对象

https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonElement.html