2016-08-15 2 views
1

JSON файл формата нужно использовать внешний вид как этотAndroid: Как разобрать JSON массив в строку

[{"fName":"Bob","lName":"Smoe","info":"is tall"},{"fName":"Claire","lName":"Smoegan","info":"has a big forehead"}] 

У меня есть список объектов людей, которые я добавить в массив JSON. Код выглядит следующим образом

for (int i = 0; i < peopleList.size(); i++){ 
     try { 
      jArray.put(peopleList.get(i)); 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
} 

Проблема в том, мне нужно, чтобы преобразовать его в строку для записи в файл, но когда я использую «jArray.toString()» возвращает

"["[email protected]", "[email protected]", "[email protected]"....] 

Как мне получить это, чтобы вернуть его в формате, указанном выше?

+1

Во-первых, это не * синтаксический анализ *. Разбор - это другой способ (строка для json). Во-вторых, это зависит от того, что такое 'jArray'. – Andreas

+0

jArray - это JSONArray – zachThePerson

ответ

3

Вы не соблюдаете правила для put() на JSONArray. Параметр должен быть:

a JSONObject, JSONArray, String, Boolean, Integer, Long, Double, NULL или null. Не может быть NaNs или бесконечности. Неподдерживаемые значения не допускаются и приводят к тому, что массив находится в противоречивом состоянии.

com.example.zach.projectFile.Person нет. То, что делает JSONArray, вызывает toString() на ваших объектах Person и использует это как значение для массива.

Ваш выбор:

  1. Реализовать что-то вроде toJSONObject() на Person, который возвращает JSONObject представление Person (например, JSONObject, что при включении в JSON, результаты в чем-то вроде {"fName":"Bob","lName":"Smoe","info":"is tall"}). Затем используйте put(peopleList.get(i).toJSONObject() для заполнения JSONArray.

  2. Используйте что-то более сложное, чем классы org.json, такие как Gson.

Кроме того, примечание Андреаса верно. Вы не разбираете JSON. Вы генерируете JSON. Разбор JSON будет преобразовывать String, содержащий JSON, в объекты Person.

+0

У меня странная проблема. Я сделал что-то подобное во время ожидания ответа (я использовал jsonObj.put («fName», fName);), но у меня возникает проблема, когда каждый раз, когда я помещаю объект в массив с помощью jArray.put (jsonObj), он заполняет массив, содержащий только последний объект. Итак, если было 10 человек, а последний - «Клайд», то у jArray есть 10 записей, но все они для Клайда. Когда я перехожу к нему, он добавляет все свойства объекта, но затем перезаписывает массив по методу jArray.put(). Какие-либо предложения? – zachThePerson

+0

@zachThePerson: Создайте новые экземпляры 'JSONObject' на' Person'. Похоже, вы снова используете одно и то же. – CommonsWare

+0

СПАСИБО! Я переместил «JSONObject jsonObj = новый JSONObject();» в петлю, и она отлично работала! – zachThePerson