Преобразование JSONarray в ArrayList
я загружаю строку JSON и преобразую ее в JSONArray. Я помещаю его в listview и должен иметь возможность удалить из этого listview позже, и поскольку JSONArray не имеет .удалите метод (спасибо Obama), я пытаюсь преобразовать его в arraylist.
вот мой JSON (массив.toString ()):
[{"thumb_url":"tb-1370913834.jpg","event_id":"15","count":"44","event_tagline":"this is a tagline","event_name":"5th birthday","event_end":"1370919600","event_start":"1370876400"}]
Мне нужно получить его в массив и иметь возможность вызывать строки по их соответствующим ключам. Ценю любую помощь!
10 ответов:
ArrayList<String> listdata = new ArrayList<String>(); JSONArray jArray = (JSONArray)jsonObject; if (jArray != null) { for (int i=0;i<jArray.length();i++){ listdata.add(jArray.getString(i)); } }
я сделал это с помощью
Gson
(от Google).добавьте следующую строку в модуль
build.gradle
:dependencies { // ... // Note that `compile` will be deprecated. Use `implementation` instead. // See https://stackoverflow.com/a/44409111 for more info implementation 'com.google.code.gson:gson:2.8.2' }
JSON
строку:private String jsonString = "[\n" + " {\n" + " \"id\": \"c200\",\n" + " \"name\": \"Ravi Tamada\",\n" + " \"email\": \"ravi@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"male\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c201\",\n" + " \"name\": \"Johnny Depp\",\n" + " \"email\": \"johnny_depp@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"male\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c202\",\n" + " \"name\": \"Leonardo Dicaprio\",\n" + " \"email\": \"leonardo_dicaprio@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"male\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c203\",\n" + " \"name\": \"John Wayne\",\n" + " \"email\": \"john_wayne@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"male\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c204\",\n" + " \"name\": \"Angelina Jolie\",\n" + " \"email\": \"angelina_jolie@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"female\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c205\",\n" + " \"name\": \"Dido\",\n" + " \"email\": \"dido@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"female\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c206\",\n" + " \"name\": \"Adele\",\n" + " \"email\": \"adele@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"female\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c207\",\n" + " \"name\": \"Hugh Jackman\",\n" + " \"email\": \"hugh_jackman@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"male\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c208\",\n" + " \"name\": \"Will Smith\",\n" + " \"email\": \"will_smith@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"male\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c209\",\n" + " \"name\": \"Clint Eastwood\",\n" + " \"email\": \"clint_eastwood@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"male\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c2010\",\n" + " \"name\": \"Barack Obama\",\n" + " \"email\": \"barack_obama@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"male\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c2011\",\n" + " \"name\": \"Kate Winslet\",\n" + " \"email\": \"kate_winslet@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"female\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " },\n" + " {\n" + " \"id\": \"c2012\",\n" + " \"name\": \"Eminem\",\n" + " \"email\": \"eminem@gmail.com\",\n" + " \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" + " \"gender\" : \"male\",\n" + " \"phone\": {\n" + " \"mobile\": \"+91 0000000000\",\n" + " \"home\": \"00 000000\",\n" + " \"office\": \"00 000000\"\n" + " }\n" + " }\n" + " ]";
ContactModel.java
:public class ContactModel { public String id; public String name; public String email; }
код для преобразования строки JSON в
ArrayList<Model>
:Примечание: Вы должны импортировать
java.lang.reflect.Type;
:// Top of file import java.lang.reflect.Type; // ... private void parseJSON() { Gson gson = new Gson(); Type type = new TypeToken<List<ContactModel>>(){}.getType(); List<ContactModel> contactList = gson.fromJson(jsonString, type); for (ContactModel contact : contactList){ Log.i("Contact Details", contact.id + "-" + contact.name + "-" + contact.email); } }
надеюсь, что это поможет вам.
попробуйте этот способ Просто пройдите через это, построив свой собственный массив. Этот код предполагает, что это массив строк, его не должно быть трудно изменить в соответствии с вашей конкретной структурой массива.
JSONArray jsonArray = new JSONArray(jsonArrayString); List<String> list = new ArrayList<String>(); for (int i=0; i<jsonArray.length(); i++) { list.add( jsonArray.getString(i) );
вместо преобразования строки JSON в ArrayList или даже карту, вы можете просто создать JSONObject сам по себе. Этот объект имеет возможность получить строковые значения по ключу, как вы хотите, а также удалить объекты.
создать
JSONObject
из правильно отформатированной строки JSON вы просто вызываете соответствующий конструктор.JSONObject json = new JSONObject(jsonString);
у меня есть быстрое решение. Просто создайте файл
ArrayUtil.java
import java.util.ArrayList; import java.util.Collection; import org.json.JSONArray; import org.json.JSONException; public class ArrayUtil { public static ArrayList<Object> convert(JSONArray jArr) { ArrayList<Object> list = new ArrayList<Object>(); try { for (int i=0, l=jArr.length(); i<l; i++){ list.add(jArr.get(i)); } } catch (JSONException e) {} return list; } public static JSONArray convert(Collection<Object> list) { return new JSONArray(list); } }
использование:
ArrayList<Object> list = ArrayUtil.convert(jArray);
или
JSONArray jArr = ArrayUtil.convert(list);
JSONArray array = new JSONArray(json); List<JSONObject> list = new ArrayList(); for (int i = 0; i < array.length();list.add(array.getJSONObject(i++)));
чтобы сделать его удобным, используйте POJO.
попробуйте вот так..
List<YourPojoObject> yourPojos = new ArrayList<YourPojoObject>(); JSONObject jsonObject = new JSONObject(jsonString); YourPojoObject yourPojo = new YourPojoObject(); yourPojo.setId(jsonObject.getString("idName")); ... ... yourPojos.add(yourPojo);
В Java 8,
IntStream.range(0,jsonArray.length()).mapToObj(i->jsonArray.getString(i)).collect(Collectors.toList())