use*_*493 7 java jackson jackson-databind
我试图通过指定该数组的路径来弄清楚如何更改JSON数组中的现有对象.
问题是我不知道如何指定数组的路径,以便可以更改它.我在那里尝试的每个方法都没有关于如何更改ObjectNode中的数组的示例.
这是我现在的代码,在其中我尝试通过指针表示法指定数组的路径来获取和更改数组,但是,这总是不返回数组:
构建POJO类不是一种选择.
我的json结构中的数组如下:
{
RESULTS: {
ATTACHMENTS: {
ATTACHMENT: [{object}]
}
}
}
Run Code Online (Sandbox Code Playgroud)
码:
private JsonNode attachmentConversion(JsonNode object){
final String ATTACHMENT_POINTER = "/RESULTS/ATTACHMENTS/ATTACHMENT"; //Path to the array
ObjectNode OUTPUT = object.deepCopy();
OUTPUT.remove("DETAILS");
//Validate is an array - It properly fetches the array
if(object.at(ATTACHMENT_POINTER).isArray()){
int counter=0;
//Loop through attachment array - It properly fethes each object in the array
for(final JsonNode objNode : object.at(ATTACHMENT_POINTER)){
ObjectNode objectNode = objNode.deepCopy();
OUTPUT.withArray(ATTACHMENT_POINTER) //HERE IS THE PROBLEM - How do I specify the path to the array I want to replace with a new object in the withArray api? This always returns back as an empty array, even though the loop above properly fetches the array elements.
.set(counter
, objectNode
.replace("ATTACH_CONTENT"
, xmlToJson.parseXmlToJson(objNode.get("ATTACH_CONTENT")
.asText())));
counter = counter+1;
}
}
return new ObjectMapper()
.createObjectNode()
.set("customertopology", OUTPUT);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为你不想改变传递给方法的对象,所以你做了一个深拷贝。并且您想返回一个新的 JSON 对象。
到目前为止我是对的吗?如果是,当您制作了深层副本时,请使用它,遍历您关注的数组的每个元素,并用您想要的值替换 Node 值。
private static JsonNode attachmentConversion(JsonNode object){
final String ATTACHMENT_POINTER = "/RESULTS/ATTACHMENTS/ATTACHMENT"; //Path to the array
ObjectNode OUTPUT = object.deepCopy();
OUTPUT.remove("DETAILS");
//Validate is an array - It properly fetches the array
if(OUTPUT.at(ATTACHMENT_POINTER).isArray()){
int counter=0;
//Loop through attachment array - It properly fethes each object in the array
for(final JsonNode objNode : OUTPUT.at(ATTACHMENT_POINTER)){
((ObjectNode)objNode).replace("ATTACH_CONTENT", xmlToJson.parseXmlToJson(objNode.get("ATTACH_CONTENT"));
}
}
return new ObjectMapper()
.createObjectNode()
.set("customertopology", OUTPUT);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1713 次 |
| 最近记录: |