【问题标题】:Build a JSON Tree with Recursion使用递归构建 JSON 树
【发布时间】:2020-06-05 06:11:03
【问题描述】:

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

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

【问题讨论】:

    标签: java json recursion jackson mapping


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2012-12-14
    • 2021-11-09
    相关资源
    最近更新 更多