2015-04-29 31 views
1

我對於如何解決似乎與JSONStringer類有關的一些核心限制有點困惑。我知道JSONStringer是爲了將JSON鏈接在一起,而不是完全形成它,但是在一個函數只返回一個JSONStringer的情況下,我發現我的手非常緊密。我想執行以下任一操作 -在Java中,有沒有辦法從JSONObject轉到JSONStringer,反之亦然?

  1. 追加到現有結構 - 請參見下文。第一個頂層對象(),其中的所有鍵/值和endObject()都在方法的範圍內,那麼在事實之後如何修改JSONStringer呢?試圖添加第二個obect()讓我得到一個JSONException:放錯位置的對象。

    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創建一個JSONStringer。我知道這是JSONObject應該用於的目的,但是令人沮喪的是,無法在兩者之間移動,特別是當兩者都成爲一個String的花哨結構化包裝時!

回答

1

也許有更好的解決辦法,但至少你有兩個選擇:

1.after建築JSON這就要求JSONString.endObject();您可以使用JSONObject類添加一個方法內對象等關鍵/值或修改現有的:

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.不要調用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()); 
相關問題