Java 在键值字段中存储JSON对象
我有一个数据结构来存储一些数据,它接受非常特定的JSON结构: {“NVPS”:[“名称”:“formData”,“值”:“myData”]} 我将一个包含子对象的大对象序列化为一个字符串,并将其放在值字段中-替换上面的“myData” 它正在使用Jackson的ObjectWriter com.fasterxml.Jackson.databind.ObjectWriter 如何清理第一块代码?请注意,Java 在键值字段中存储JSON对象,java,json,jackson,Java,Json,Jackson,我有一个数据结构来存储一些数据,它接受非常特定的JSON结构: {“NVPS”:[“名称”:“formData”,“值”:“myData”]} 我将一个包含子对象的大对象序列化为一个字符串,并将其放在值字段中-替换上面的“myData” 它正在使用Jackson的ObjectWriter com.fasterxml.Jackson.databind.ObjectWriter 如何清理第一块代码?请注意,{“NVPS”:[“NAME”:“formData”,“VALUE”:“myData”]}不是
{“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"
}
}
NVPS
应该是一个数组吗?我的意思是,用[]
代替{}
。不,显然不是。它是由SAP系统中使用的RFC定义的结构。RFC允许存储JSON对象,但它不能接受任意JSON字符串-它必须采用以下格式:{“NVPS\”:[“名称”:“myName”,“值”:“myValue”]}请注意,{“NVPS”:[“名称”:“formData”,“值”:“myData”]}
不是有效的JSON。好的,我不确定我是否在这里的简化过程中弄错了。然而,代码块中的最后一条语句确实生成了一些在我使用的存储中工作的东西。我想我以前在JSONLint中解析过这个字符串,我很确定它通过了。谢谢。我必须运行通过JSONLint实际得到的内容并进行检查。你提供的解决方案看起来比我一直在做的要整洁得多。我应该能在我的工作中做到这一点。
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"
}
}