2014-02-23 6 views
3

ArrayList를 JSONArray로 변환했습니다. 어떻게 다시 변환 할 수 있습니까?JSONArray에서 ArrayList로 변환 <CustomObject> - Android

최종 결과는 ArrayList 여야합니다. 미리 감사드립니다.

편집 :

이 내가 JSONArray에 ArrayList를 변환하는 방법입니다

String string_object= new Gson().toJson(MyArrayList<OBJECT>); 
JSONArray myjsonarray = new JSONArray(string_object); 
+0

을 무슨 일이야? 어떻게 그것을 JSONArray로 변환 했습니까? –

+0

나는 내 자신의 객체를 만들었고 배열 목록에 3 개의 객체를 채 웁니다. 먼저 arraylist를 JSONArray로 변환하고 다시 ArrayList로 변환하려고합니다. 어떤 팁? –

+0

변환 프로세스에 대해 더 많이 알지 못하면 유일한 팁이 있습니다. 변환 프로세스를 역으로 실행하십시오. –

답변

12

당신은 또한

ArrayList<OBJECT> yourArray = new Gson().fromJson(jsonString, new TypeToken<List<OBJECT>>(){}.getType()); 

//or 

ArrayList<OBJECT> yourArray = new Gson().fromJson(myjsonarray.toString(), new TypeToken<List<OBJECT>>(){}.getType()); 

아래로 GSON 라이브러리를 사용하여 ArrayList<OBJECT>에 JsonArray 또는 JSON 문자열을 변환 할 수 있습니다 ArrayList<OBJECT> JsonArray로 변환하는 동안, 필요

JsonArray myjsonarray = new Gson().toJsonTree(MyArrayList<OBJECT>).getAsJsonArray(); 
JsonArray

다시 문자열로 변환하지하고

자세한 내용은 Gson API documentation을 참조하십시오. 희망이 도움이 될 것입니다.

2

JSONArray 그냥 객체의 하위 클래스입니다, 그래서 당신은 다른에 JSONArray 밖으로 JSONObjects을 얻으려면 JSONArray에는 편리한 방법이 없으므로 각 JSONObject를 가져 와서 ArrayList를 직접 채워야합니다.

여기에 그것을 할 수있는 간단한 방법입니다 :

ArrayList<JSONObject> arrayList = new ArrayList(myJSONArray.length()); 
for(int i=0;i < myJSONArray.length();i++){ 
    arrayList.add(myJSONArray.getJSONObject(i)); 
} 

편집 :

OK, 당신은 당신이 GSON를 사용하는 것을 보여주기 위해 코드를 편집했다. 그것은 다른 색의 말입니다. JSONArray 대신 com.google.gson.JsonArray를 사용하는 경우 Gson.fromJson() 메서드를 사용하여 ArrayList를 가져올 수 있습니다. Gson - convert from Json to a typed ArrayList

+0

이것은 내가 찾고있는 것이 아닙니다. 제발 도와 주시면 질문을 편집 해 드리겠습니다. –

+1

실망스러운 사실은'JSONArray'가 이미 내부의'ArrayList'를 사용하고 있지만 그 중 하나는 private입니다. – luckydonald

1

불행하게도, 이것은 당신의 부분에 약간의 작업이 필요합니다 : 여기

는 링크입니다. Gson은 임의 객체의 일반적인 컬렉션을 비 직렬화하는 것을 지원하지 않습니다. Gson 사용자 안내서 주제 Serializing and Deserializing Collection with Objects of Arbitrary Types은 원하는 것을하기위한 세 가지 옵션을 나열합니다.

특정 작업을 수행하지 않고 Gson을 사용하여 컬렉션을 직렬화 할 수 있습니다. toJson(collection)은 원하는 출력을 작성합니다. 그러나 GFC에서는 입력을 입력 형식에 매핑하는 방법을 알 수 없으므로 fromJson(json, Collection.class)을 사용하여 비 직렬화가 작동하지 않습니다. Gson은 fromJson에 컬렉션 유형의 제네릭 버전을 제공해야합니다. 그래서, 당신은 세 가지 옵션이 있습니다

옵션을 1 : 사용 GSON의 파서 API (낮은 수준의 스트리밍 파서 또는 DOM 파서 JsonParser) 배열 요소를 구문 분석하고 배열의 각 요소에 Gson.fromJson()을 사용합니다. 이것은 선호되는 방법입니다. 이 작업을 수행하는 방법을 보여주는 Here is an example

옵션 2 : 각 배열 구성원을보고 적합한 개체에 매핑하는 Collection.class 용 유형 어댑터를 등록하십시오. 이 방법의 단점은 Gson에서 다른 컬렉션 유형의 비 직렬화를 망칠 것이라는 점입니다.

옵션 3 : MyCollectionMemberType의 유형 어댑터를 등록하고 Collection<MyCollectionMemberType> 이 방식으로 fromJson을 사용하는 배열은 최상위 요소로 나타나거나 경우에만 실용적입니다 당신의로 컬렉션을 들고 필드 유형을 변경할 수있는 경우 Collection<MyCollectionMemberType>을 입력하십시오.

세 가지 옵션에 대한 자세한 내용은 문서를 참조하십시오.

0

우리가 전환에서 시작 [JSONArray -> 목록 < 된 JSONObject>]

다음
public static List<JSONObject> getJSONObjectListFromJSONArray(JSONArray array) 
     throws JSONException { 
    ArrayList<JSONObject> jsonObjects = new ArrayList<>(); 
    for (int i = 0; 
      i < (array != null ? array.length() : 0);   
      jsonObjects.add(array.getJSONObject(i++)) 
     ); 
    return jsonObjects; 
} 

POJO

예와 array.getJSONObject는 (i ++)을 대체하는 일반 버전 생성 :

public <T> static List<T> getJSONObjectListFromJSONArray(Class<T> forClass, JSONArray array) 
     throws JSONException { 
    ArrayList<Tt> tObjects = new ArrayList<>(); 
    for (int i = 0; 
      i < (array != null ? array.length() : 0);   
      tObjects.add((T) createT(forClass, array.getJSONObject(i++))) 
     ); 
    return tObjects; 
} 

private static T createT(Class<T> forCLass, JSONObject jObject) { 
    // instantiate via reflection/use constructor or whatsoever 
    T tObject = forClass.newInstance(); 
    // if not using constuctor args fill up 
    // 
    // return new pojo filled object 
    return tObject; 
} 
관련 문제