简体   繁体   English

在键值字段中存储JSON对象

[英]Storing JSON Object in Key Value Field

I have a data structure to store some data in that accepts very specific JSON structure: 我有一个数据结构来存储一些接受非常特定的JSON结构的数据:

{ "NVPS": [ "NAME": "formData", "VALUE" : "myData" ] } {“ NVPS”:[“ NAME”:“ formData”,“ VALUE”:“ myData”]}

I'm serialising a large object that contains sub-objects into a string which I'm putting in the value field - replaces "myData" above. 我正在将一个包含子对象的大对象序列化为一个字符串,并将其放入值字段中-替换上面的“ 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 + "]}";

Can anyone suggest a less ugly way I might be able to do this? 任何人都可以建议一个不太丑陋的方式来执行此操作吗? I'm particularly not that happy with the last line where I create a JSON string by hand. 我对手动创建JSON字符串的最后一行不满意。

Here is the serializeJson() function from JsonUtils: 这是来自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;
}

It's using Jackson's ObjectWriter com.fasterxml.jackson.databind.ObjectWriter. 它使用Jackson的ObjectWriter com.fasterxml.jackson.databind.ObjectWriter。

How can I clean up the first block of code? 如何清除第一段代码?

Be aware that { "NVPS": [ "NAME": "formData", "VALUE" : "myData" ] } is not a valid JSON. 请注意{ "NVPS": [ "NAME": "formData", "VALUE" : "myData" ] }不是有效的JSON。


For valid JSON, you can try: 对于有效的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);

It will give you: 它会给你:

{
  "NVPS" : [ {
    "NAME" : "formData"
  }, {
    "VALUE" : "myData"
  } ]
}

You also can try: 您也可以尝试:

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);

And the result will be: 结果将是:

{
  "NVPS" : {
    "NAME" : "formData",
    "VALUE" : "myData"
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM