java - 使用 GSON 在 Java 中创建不同格式的嵌套 JSON 对象

标签 java json gson

我百分百确定这个问题已经被问过一百万次了,但我真的不确定如何正确处理这个问题。我还没有对 JSON 做过很多工作,也没有对其进行序列化。

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

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

分解一下,我们有一个数组字段,其中包含对象,这些对象本身包含两个字段,其中一个映射到字符串,另一个映射到另一个数组,该数组可以包含未知数量的整数,也可以完全失踪。

我什至无法想象如何使用 GSON 获得这个结果。到目前为止,我的想法是将所有内容都放在 Map<String, List<Map<String, Object>>> 中。野兽并转换它,但该对象困扰着我,因为在这种特殊情况下它可能是字符串或列表。可能会有强制转换,但这听起来像是一件愚蠢而复杂的事情,如果我只是在 String.format() 或类似的内容中手动输入它,看起来会更容易。

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

最佳答案

我会为您的数据创建一些 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

关于java - 使用 GSON 在 Java 中创建不同格式的嵌套 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58068946/

相关文章:

C++ RapidJSON 清除写入的字符串

python - Django/python 验证 JSON

java - Joda DateTime 从 JSON 反序列化为当前时间戳而不是提供的数据

java - 如果列表包含不同的类,如何使用 gson 将 json 转换为 arraylist?

java - 我不确定如何修复堆栈溢出错误

java - Arrays.asList编译问题

java - 以最佳方式计算 x 的 x 次方

java - AKKA vs JADE 代表代理系统

javascript - excel文件到json的转换

android - 使用 GSON 将嵌套对象展平为目标对象