使用递归构建JSON树

时间:2020-02-20 20:30:59

标签: java json recursion jackson mapping

我想从多个字符串中递归创建一个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));
        }
    }

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

1 个答案:

答案 0 :(得分:1)

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

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

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