将 JSON 对象存储在键值字段中



我有一个数据结构来存储一些数据,它接受非常具体的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。

如何清理第一个代码块?

请注意,{ "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"
  }
}

最新更新