2016-11-17 14 views
0

我在JSONObject中的循環中遇到問題。我嘗試修改元素「名稱」。 我知道對象的所有鍵。 我有帶字符串的列表:`[「person 1」,「data」,「moreInfo」,「name」,「John」]; 我知道他們是對象。裏面的人1數據,moreInfo數據等等使用JSONObject中的鍵迭代

我可以改變它像:

JSONObject js = new JSONObject(jsonFile); 
js = js.getJSONObject("person 1").getJSONObject("data").getJSONObject("moreInfo"); 
js.put("name","secName"); 

這是好,但我不知道我是多麼的元素將在列表中。 也許:["person 1" ....... "moreInfo", "name", "John"]; 我嘗試使用循環,但我不能做到這一點,它可以迭代到如下結果:getJSONObject("moreInfo")

{ 
    "Person 1": -firstWord in list { 
     "data": { 
      "moreInfo": { 
       "name": "John" 
      } 
     } 
    } 
} 
+0

你可以顯示JSON字符串的內容嗎? –

+0

好的,編輯第一篇文章,但它是隨機數據,因爲從文件生成。我有鑰匙,我必須去索引'list.size() - 2'的鍵,並在該對象上執行put方法。 –

+0

問題:可以將JSON轉換爲{{「people」格式:[{「name」:「John」,「moredata」:{「value」:「extras」}}]' –

回答

0

所以我假定你有一個大小爲一個字符串數組,第n-1個元素是JSON路徑,最後一個是你要設置

你可以不喜歡它的新價值這個:

String[] paths = new String[] {"person 1","a","b","c","moreInfo", "name", "John"}; 

    JSONObject root = js; 
    JSONObject current = root; 
    for (int i = 0; i < paths.length - 2; i++) { 
     current = current.getJSONObject(paths[i]); 
    } 
    current.put(paths[paths.length - 2], paths[paths.length - 1]); 

我跳過這裏的正確性檢查。但是您可能需要添加代碼來檢查每個步驟中是否存在密鑰。

+0

不應該有'current = current.getJSONObject(paths [i]);'? –

+0

你是對的,錯字固定。它應該是循環中的「當前」而不是「根」 – Harper