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

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


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


{

    "wrapper" : [

        {

            "content": "loremipsum",

            "positions": [0,3]

        },

        {

            "content": "foobar",

            "positions": [7]

        },

        {

            "content": "helloworld"

        }

    ]

}

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


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


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


守候你守候我
浏览 189回答 3
3回答

凤凰求蛊

我会为您的数据创建一些 POJO 类:class MyData {&nbsp; &nbsp; private List<Data> wrapper;&nbsp; &nbsp; //getters setters constructors}class Data {&nbsp; &nbsp; private String content;&nbsp; &nbsp; private List<Integer> positions;&nbsp; &nbsp; //getters setters constructors}然后反序列化它:Gson gson = new Gson();String json = //json hereMyData 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 wrapperJsonArray array = wrapperElement.getAsJsonArray(); // access array

慕后森

没有POJO,这似乎可以使用Gson解决嵌套JSON解决方案package com.test;import com.google.gson.JsonObject;public class Main {&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; JsonObject ex3 = new JsonObject();&nbsp; &nbsp; &nbsp; &nbsp; ex3.addProperty("example3", 30);&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; JsonObject ex2 = new JsonObject();&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ex2.add("example2", ex3.getAsJsonObject());&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; JsonObject ex1 = new JsonObject();&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ex1.add("example1", ex2.getAsJsonObject());&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(ex1.toString());&nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp;}输出是:{"example1":{"example2":{"example3":30}}}

慕容708150

最好使用Pojo进行格式化。class Wrapper{&nbsp;private List<Data> data;&nbsp;// geters, seters}class Data{&nbsp;private String content;&nbsp;private List<Integer> positions;&nbsp;// geters, seters}对于反序列化/序列化,您可以使用JacksonObjectMapper mapper = new ObjectMapper();Wrapper wriper = mapper.readValue(dataString, Wrapper.class);String jsonString = mapper.writeValueAsString(wriper);或GsonGson gson = new Gson();Wrapper wriper = gson.fromJson(dataString, Wrapper.class);String json = gson.toJson(wriper);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java