以下是json
{
"UserInfoService": {
"state": "active",
"message": [
"hello",
"world"
]
},
"UserProfileService": {
"state": "inactive",
"message": "[foo,bar]"
}
}
我有基于版本
存储这些jsonNode的map例如:{"v1": jsonNode@1343, "v2":jsonNOde@1353543}
这是我的方法:
public class ModifyMap {
private Map<String,JsonNode> map = new HashMap<>();
private void updateNode(Foobar foo,String version, List<String> messages, String mainKey){
JsonNode rootNode = featureStatusNodes.get(version);
if (featureNode==null){
rootNode=mapper.createObjectNode();
}
JsonNode stateNode = mapper.convertValue(new Status(foo.getState()), JsonNode.class);
JsonNode messageNode = mapper.convertValue(messages, JsonNode.class);
((ObjectNode) rootNode).set("state",stateNode);
((ObjectNode) rootNode).set("message",messageNode);
rootNode.put(version, featureNode);
}
}
public class Status {
String state;
//getters and setters
}
public class FooBar {
Status status;
//getters and setters
}
这就是我所拥有的。
但是如何将参数中传递的mainKey
设置为顶级节点。在上面的示例中,mainKey
将是userInfoService
。
要考虑的因素是
如果存在mainKey
节点,则使用传递的值
如果不存在,则创建一个并更新它。
请注意,在示例中有两个mainKeys
:userInfoService
,userProfileService
。
有一个top-level map
维护versions
到jsonNode
的映射。
在上面的例子中,如果对于给定的版本,如果jsonNode为null,则创建一个并更新它。
如果对于给定版本,存在jsonNode(例如userInfoService
)但userProfileService
不存在,则更新根以包含userProfileService
。
如果仅对已存在的userInfoService
进行更新,则相应地更新。
答案 0 :(得分:0)
您需要额外级别的JsonNode(或Map)来存储mainKey-&gt;节点关联。
例如:
Map<String, Map<String, ObjectNode>> map = new HashMap<>();
private void updateNode(Foobar foo,
String version,
List<String> messages,
String mainKey) {
Map<String, ObjectNode> versionedMap = map.computeIfAbsent(version, HashMap::new);
ObjectNode rootNode = versionedMap.computeIfAbsent(mainKey, mapper::createObjectNode);
// update rootNode
}
或:
Map<String, ObjectNode> map = new HashMap<>();
private void updateNode(Foobar foo,
String version,
List<String> messages,
String mainKey) {
ObjectNode versionedNode = map.computeIfAbsent(version, mapper::createObjectNode);
ObjectNode rootNode = versionedNode.get(mainKey);
if (rootNode == null) {
rootNode = mapper.createObjectNode();
versionedNode.set(mainKey, rootNode);
}
// update rootNode
}