2016-11-17 4 views
0

У меня проблема с циклом в JSONObject. Я пытаюсь изменить элемент «name». Я знаю все ключи для объектов. У меня есть список со строками: `[" 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' и на этом методе выполнения объекта. –

+0

Боковой вопрос: возможно ли получить JSON в формате '{" people ": [{" name ":" John "," moredata ": {" value ":" extras "}}]' –

ответ

0

Так я предполагаю, что у вас есть строка массив размера п, первые п-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

Вы правы, опечатка исправлена. Он должен быть «current» вместо «root» в цикле – Harper

Смежные вопросы