我百分百确定这个问题已经被问过一百万次了,但我真的不确定如何正确处理这个问题。我还没有对 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/