java - 递归方法创建Json对象

标签 java json recursion

我想知道如何执行以下操作:

我想创建以下的 json 格式:

我希望能够创建一个递归函数,该函数接受一个包含相同类型的其他对象列表的对象,并在一个方法中以递归方式创建以下格式。

{
    "name": "lib",
    "contains": [{
        "name": "room",
        "contains": [{
            "name": "bookshelf",
            "contains": [{
                "name": "shelf",
                "contains": []
            }]
        }]
    }]
}

我有以下方法:

private JSONObject json = new JSONObject();

public  JSONObject setupLib(Contains contain) {

    int count = contain.getContainerList().size();

    for(int i = 0; i < count; i++){
        try {

            json.put("name", contain.getContainerList().get(i).getContainerName());

            if(contain.getContainerList().size() != 0) {
                Contains contains = (Contains) contain.getContainerList().get(i);

                JSONArray array = new JSONArray();

                json.put("contain",array.put(setupLib(contains)));}
        }catch (JSONException e){
            Log.i(Tag, e.getMessage());
        }
    }

    return json;

} 我在数组/对象上得到一个 stackoverflow

最佳答案

两种选择

  1. 递归地自己做
  2. 使用 Gson 这样的库为您节省开发时间和精力

由于这是一次学习经历,我已经展示了返回此 JSON 的两者。

{
    "name": "lib",
    "contains": [{
        "name": "room",
        "contains": [{
            "name": "bookshelf",
            "contains": [{
                "name": "shelf",
                "contains": []
            }]
        }]
    }]
}

public static void main(String[] args) {
    Contains lib = new Contains("lib");
    Contains room = new Contains("room");
    Contains bookshelf = new Contains("bookshelf");
    Contains shelf = new Contains("shelf");

    bookshelf.add(shelf);
    room.add(bookshelf);
    lib.add(room);

    // Option 1
    System.out.println(setupLib(lib).toJSONString());

    // Option 2
    Gson gson = new Gson();
    System.out.println(gson.toJson(lib));
}

private static JSONObject setupLib(Contains contain) {
    if (contain == null) return null;
    LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();

    JSONArray array = new JSONArray();
    for (Contains c : contain.getContainerList()) {
        JSONObject innerContain = setupLib(c);
        if (innerContain != null) {
            array.add(innerContain);
        }
    }
    map.put("name", contain.getName());
    map.put("contains", array);

    return new JSONObject(map);
}

这是模型对象,供引用

public class Contains {
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("contains")
    @Expose
    private List<Contains> contains;

    public Contains(String name) {
        this.name = name;
        contains = new ArrayList<Contains>();
    }

    public void setName(String name) {
        this.name = name;
    }

    public void add(Contains c) {
        this.contains.add(c);
    }

    public void setContainerList(List<Contains> contains) {
        this.contains = contains;
    }

    public String getName() {
        return name;
    }

    public List<Contains> getContainerList() {
        return this.contains;
    }
}

关于java - 递归方法创建Json对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35409769/

相关文章:

linux - 递归斐波那契组装

haskell - 通过替换变态来消除显式递归

java - 检查器显示 3 秒更新,如何获取新值?

java - 将整数时间戳转换为java日期

json - 未进行 SSL 连接尝试时,MongoDB 提示 SSL 握手

javascript - Chrome 开发者工具 [TimeLine] 从 json 跟踪文件计算聚合时间

java - 如何从 Object[] 转换为另一种数组类型?

java - 动画背景java游戏

python - 用Python通过api访问Json数据

c - 用递归反转字符串的奇怪方法