我需要在以下结构中使用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)?
答案 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