我有一个数据结构来存储一些接受非常特定的JSON结构的数据:
{" NVPS":[" NAME":" formData"," VALUE" :" myData" ]}
我将包含子对象的大型对象序列化为一个字符串,我将其放入值字段中 - 替换" myData"上方。
// Serialise the form object
Map<String, String> formData = new HashMap<String, String>();
String foJson = JsonUtils.serializeJson(formObject); // returns a serialised version of formObject
formData.put("NAME", "formData");
formData.put("VALUE", foJson);
String storeJson = JsonUtils.serializeJson(formData);
storeJson = "{\"NVPS\":[" + storeJson + "]}";
任何人都可以建议一种不那么难看的方式我可以做到这一点吗?对于我手工创建JSON字符串的最后一行,我特别不满意。
这是来自JsonUtils的serializeJson()函数:
public static String serializeJson(Object dto) {
String result = null;
try {
ObjectWriter writer = mapper.writer();
result = writer.writeValueAsString(dto);
} catch (Exception e) {
String errorMsg = "Exception in serializeJson input= " + dto;
logger.error(JSON_UTILS_DEBUG_TEXT + errorMsg);
throw new RuntimeException(e);
}
return result;
}
它使用了Jackson的ObjectWriter com.fasterxml.jackson.databind.ObjectWriter。
如何清理第一段代码?
答案 0 :(得分:1)
请注意{ "NVPS": [ "NAME": "formData", "VALUE" : "myData" ] }
不是有效的JSON。
对于有效的JSON,您可以尝试:
ObjectMapper mapper = new ObjectMapper();
ArrayNode arrayNode = mapper.createArrayNode();
arrayNode.addObject().put("NAME", "formData");
arrayNode.addObject().put("VALUE", "myData");
ObjectNode rootNode = mapper.createObjectNode();
rootNode.set("NVPS", arrayNode);
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode);
它会给你:
{
"NVPS" : [ {
"NAME" : "formData"
}, {
"VALUE" : "myData"
} ]
}
您也可以尝试:
ObjectMapper mapper = new ObjectMapper();
ObjectNode objectNode = mapper.createObjectNode();
objectNode.put("NAME", "formData");
objectNode.put("VALUE", "myData");
ObjectNode rootNode = mapper.createObjectNode();
rootNode.set("NVPS", objectNode);
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode);
结果将是:
{
"NVPS" : {
"NAME" : "formData",
"VALUE" : "myData"
}
}