2014-02-07 2 views
-1

В моем андроида проекта, у меня есть строка text которая получила следующие данные:Синтаксических Json в Android и установить его в ListView

[ 
    { 
    "admin": true, 
    "created_at": "2012-10-16T07:26:49Z", 
    "email": "[email protected]", 
    "id": 28, 
    "language": "fr", 
    "name": "Marc", 
    "profile_pic_content_type": null, 
    "profile_pic_file_name": null, 
    "profile_pic_file_size": null, 
    "profile_pic_updated_at": null, 
    "provider": null 
    }, 
    { 
    "admin": false, 
    "created_at": "2013-04-02T18:47:36Z", 
    "email": "[email protected]", 
    "id": 263, 
    "language": "en", 
    "name": "Marcus", 
    "profile_pic_content_type": null, 
    "profile_pic_file_name": null, 
    "profile_pic_file_size": null, 
    "profile_pic_updated_at": null, 
    "provider": null 
    } 
] 

Я превратил его в JSON объект благодаря этому:

JSONObject jsonObj = new JSONObject(text); 

Я хочу проанализировать этот объект Json и установить его внутри ListView, но даже с official documentation мне это не удастся.

После разбора, я хочу сохранить только первую часть массива, и удалите все поля кроме электронной почты, языка и имени, чтобы получить это в конце концов:

[ 
    { 
    "email": "[email protected]", 
    "language": "fr", 
    "name": "Marc" 
    } 
] 
+0

Преобразование его внутри объекта json, попытка его разобрать, прежде чем преобразовать его как объект json в качестве строки, но все равно не удастся – sidney

+0

написать код .. соответствующий фрагмент – Blackbelt

+0

Вы будете смеяться над мной. 'Log.e (" retrieve2 ", text.toCharArray() [0]);' – sidney

ответ

2

Вы имеете дело с a JSONArray - [] - содержит два отдельных JSONObject. То, как вы извлекаете значения из этой структуры, - это просто идти по частям, сначала получая вложенные объекты из массива, а затем извлекая их внутренние значения. Затем вы можете переупаковать его по своему усмотрению. Например:

int numObject = jsonArray.length(); 
JSONArray repackArray = new JSONArray(); 
for(int i = 0; i < numObject; i++){ 
    JSONObject nested = jsonArray.getJsonObject(i); 

    //get values you need 
    String email = nested.getString("email"); 
    String language = nested.getString("language"); 
    String name = nested.getString("name"); 

    //add values to new object 
    JSONObject repack = new JSONObject(); 
    repack.put("email", email); 
    repack.put("language", language); 
    repack.name("name", name); 

    //add to new array 
    repackArray.put(repack); 
} 

В качестве альтернативы, если положить не работает для вас, вы всегда можете создать свою собственную строку в формате JSON, а затем просто создать новый JSONObject, используя эту строку в качестве аргумента в конструкторе. Я предположил, что вы работали с JSONArray в приведенном выше примере. Если вы начинаете с JSONObject, процесс будет таким же. Перед тем, как распаковывать, сначала удалите JSONArray.

+0

Спасибо за ответ, я внедрил его, но я получил это: 'Метод getString (int) в типе JSONArray не применим для аргументов (String)' для "вложенных .getString "три строки. Он ожидает индекс, а не строку. Должен ли я определять номер строки вручную? – sidney

+0

Получить строку [не требуется индекс] (http://developer.android.com/reference/org/json/JSONObject.html). Вы получили эту ошибку, потому что пытаетесь получить строковое значение из 'JSONArray'. Вы можете получить только эти строковые значения из 'JSONObject' - части, заключенной в {}. Я основывал этот код на тексте, который вы указали выше. Если фактический JSON - это другой формат - скажем, что текст, заключенный в другой 'JSONObject', вам нужно сначала извлечь этот массив или преобразовать его в' JSONArray', используя toJSONArray, прежде чем он будет работать. – Rarw

+0

Спасибо, это очень помогло – sidney

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