如何在java中构造带有数组和对象的json

时间:2017-07-28 07:15:37

标签: java json gson

我需要在以下结构中使用json作为请求体传递给我的服务。

{
  "i":[
    {
      "a":{
        "o1":"str1";
        "o2":234;
      }
    }
  ]
}

我可以传递一张地图 <“i [0] .a.o1”,“str1”> <“i [0] .a.02”,345>  或者像串一样传递它们 的 “i [0] .a.o1”= “STR1” &安培; “I [0] .a.02”= 345

构建Json。

如何将地图或字符串输入转换为上面的json结构? 我应该使用'I'和'A'的内部类,只使用GsonUtils.getString(I)?

2 个答案:

答案 0 :(得分:0)

也许你应该试试jackson api。相信我,它会让你的生活变得更轻松。

使用此api,您可以保证您拥有有效的json对象。此外,您可以轻松构建您的json节点。

答案 1 :(得分:0)

我同意答案https://stackoverflow.com/a/45367328/2735286:杰克逊库提供了很好的功能,可以将对象序列化,反序列化到JSON和从JSON反序列化。

以下是一些示例代码,用于创建您建议的地图结构,序列化它,然后反序列化并检查,如果反序列化结构与原始结构相同。

public class JacksonMapperTest {

    private static ObjectMapper mapper = new ObjectMapper();

    public static void main(String[] args) throws IOException {
        Map<String, Object> root = provideMap(); // Create map
        String json = convertToJson(root); // Convert to string
        System.out.println(json); // Print json
        Map<String, Object> rootClone = convertToMap(json); // Convert string to map
        System.out.println(root.equals(rootClone)); // Check, if the original and deserialized objects are the same.
    }

    private static Map<String, Object> convertToMap(String json) throws IOException {
        TypeReference<HashMap<String,Object>> typeRef
                = new TypeReference<HashMap<String,Object>>() {};
        return mapper.readValue(json, typeRef);
    }

    private static String convertToJson(Map<String, Object> root) throws JsonProcessingException {
        return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root);
    }

    private static Map<String, Object> provideMap() {
        Map<String, Object> root = new HashMap<>();
        List<Map<String, Object>> i = new ArrayList<>();
        root.put("i", i);
        Map<String, Object> element = new HashMap<>();
        Map<String, Object> a = new HashMap<String, Object>() {
            {
                put("o1", "str1");
                put("o2", 234);
            }
        };
        i.add(element);
        element.put("a", a);
        return root;
    }
}

如果您运行此代码,您将在控制台中看到:

{
  "i" : [ {
    "a" : {
      "o1" : "str1",
      "o2" : 234
    }
  } ]
}
true

如果您想在项目中使用Jackson,可以在pom.xml文件中创建一个包含这些依赖项的Maven项目:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.8</version>
</dependency>

有关杰克逊的更多信息,请查看:https://github.com/FasterXML/jackson