我想从多个字符串递归创建JSON树。字符串可能像这样:

.this.is:0.a.test


字符串解释如下:


.是一个对象
:是一个数组
:0.
数组


相应的JSON看起来像这样

{
   "this":{
      "is":[
         {
            "a":{
               "test":"testvalue"
            }
         }
      ]
   }
}


我的代码如下所示:

public static JsonNode recursiveLimb(ArrayList<String> limb, Map<String, String> mappingBodyMap, BidiMap<String, String> bidiMap, JsonNode currentTree, String path) {

        if (!limb.isEmpty() && limb.get(0).equals(".")) {
            //object node

            String firstElem = limb.remove(0);
            String secondElem = limb.remove(0);
            //call recursion to build rest of tree
            JsonNode resultJN = recursiveLimb(limb, mappingBodyMap, bidiMap, currentTree, path + firstElem + secondElem);

            return mapper.createObjectNode().set(secondElem, resultJN);

        } else if (!limb.isEmpty() && limb.get(0).equals(":")) {
            //array node

            String firstElem = limb.remove(0);
            String secondElem = limb.remove(0);
            //call recursion to build rest of tree
            JsonNode resultJN = recursiveLimb(limb, mappingBodyMap, bidiMap, currentTree, path + firstElem + secondElem);

            return mapper.createArrayNode().add(resultJN);

        } else {
            //value node

            String value = bidiMap.getKey(path);
            return new TextNode(mappingBodyMap.get(value));
        }
    }


此代码返回树的所有单个链接。问题是,我很难把它们放在一起。希望有人可以帮助我。有人知道我能做什么吗?

最佳答案

我认为与其使用它,不如创建一个字符串并将其最后转换为JSON会更容易。例如:.life.is:0.so.good->我们从头开始阅读;


我们发现 。我们这样创建:{good = goodValue}
我们发现:0。是:[{so:{good = goodValue}}]]
我们发现 。生活:{is:[{so:{good = goodValue}}]}
我们找到了最后一个。我们添加了{life:{is:[{so:{good = goodValue}}]}}


我相信您的解决方案是好的,我只是想简化问题,所以仍然取决于您。

08-26 01:55