2016-11-17 62 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