在 Java 中,有没有一种方法可以从 JSONObject 转到 JSONStringer,反之亦然?

In Java, is there a way I could go from JSONObject to JSONStringer, or vice versa?

对于如何绕过 JSONStringer class 的一些核心限制,我有点困惑。我知道 JSONStringer 是为了将 JSON 链接在一起而不是完全形成它,但是如果一个函数只有 returns 一个 JSONStringer,我发现我的手很紧。我想执行以下操作之一--

  1. 附加到现有结构 -- 见下文。第一个顶级 object(),其中所有 keys/values 和 endObject() 都在一个方法的范围内,那么我怎么能在事后修改 JSONStringer 呢?尝试添加第二个 obect() 得到一个 JSONException: Misplaced object.

        JSONStringer json = new JSONStringer();
        json.object();
        json.key("stuff").value("1")
                .key("name").value("2")
                .key("type_name").value("3")
                .key("type").value("4");
        json.endObject();
    
        json.object().key("hi").value("hi2").endObject();
    
  2. 修改现有结构,I.E.从方法返回后,在上面的 json 中添加另一个键。

  3. 从任意JSON创建一个JSON纵梁。我知道这就是 JSONObject 的用途,但令人沮丧的是无法在两者之间移动,尤其是当两者都相当于 String 的花哨结构化包装器时!

也许有更好的解决方案,但至少你有两个选择:

1.after 在调用 JSONString.endObject(); 的方法中构建 json 对象,您可以使用 JSONObject class添加其他 key/values 或修改现有的:

    JSONStringer json = new JSONStringer();

    json.object();
    json.key("stuff").value("1")
            .key("name").value("2")
            .key("type_name").value("3")
            .key("type").value("4");
    json.endObject();

    //after calling the method which returns a jsonobject like above:
    JSONObject jo=new JSONObject(json.toString());
    jo.put("hi", "hi2");

2.don不要在您的方法中调用 endObject() 并在所有操作之后调用:

public JSONStringer build() {
    JSONStringer json = new JSONStringer();

    json.object();
    json.key("stuff").value("1")
            .key("name").value("2")
            .key("type_name").value("3")
            .key("type").value("4");
    return json ;
}
//in the other place when calling above method, say:
    JSONStringer json=build();
    json.key("hi").value("hi2");
    json.endObject();
    System.out.println(json.toString());