program story

ArrayList 변환

inputbox 2020. 8. 5. 08:13
반응형

ArrayList 변환 JSONArray로


ListView에 대해 ArrayAdapter 내에서 사용하는 ArrayList가 있습니다. 목록에있는 항목을 가져 와서 JSONArray로 변환하여 API로 보내야합니다. 나는 주변을 검색했지만 이것이 어떻게 작동하는지 설명하는 것을 찾지 못했습니다. 도움을 주시면 감사하겠습니다.

업데이트-솔루션

다음은이 문제를 해결하기 위해했던 일입니다.

ArrayList의 객체 :

public class ListItem {
    private long _masterId;
    private String _name;
    private long _category;

    public ListItem(long masterId, String name, long category) {
        _masterId = masterId;
        _name = name;
        _category = category;
    }

    public JSONObject getJSONObject() {
        JSONObject obj = new JSONObject();
        try {
            obj.put("Id", _masterId);
            obj.put("Name", _name);
            obj.put("Category", _category);
        } catch (JSONException e) {
            trace("DefaultListItem.toString JSONException: "+e.getMessage());
        }
        return obj;
    }
}

내가 그것을 변환 한 방법은 다음과 같습니다.

ArrayList<ListItem> myCustomList = .... // list filled with objects
JSONArray jsonArray = new JSONArray();
for (int i=0; i < myCustomList.size(); i++) {
        jsonArray.put(myCustomList.get(i).getJSONObject());
}

그리고 출력 :

[{"Name":"Name 1","Id":0,"Category":"category 1"},{"Name":"Name 2","Id":1,"Category":"category 2"},{"Name":"Name 3","Id":2,"Category":"category 3"}]

이것이 언젠가 누군가를 돕기를 바랍니다!


JSONArray 생성자를 올바르게 읽으면 다음과 같이 모든 Collection (arrayList는 Collection의 하위 클래스 임)에서 빌드 할 수 있습니다.

ArrayList<String> list = new ArrayList<String>();
list.add("foo");
list.add("baar");
JSONArray jsArray = new JSONArray(list);

참고 문헌 :


Gson 라이브러리를 사용하여 ArrayList를 JsonArray로 변환하십시오.

Gson gson = new GsonBuilder().create();
JsonArray myCustomArray = gson.toJsonTree(myCustomList).getAsJsonArray();

누군가 OP가 사용자 정의 목록을으로 변환 org.json.JSONArray하지 않으려 는 것으로 확인 com.google.gson.JsonArray하면 올바른 답변은 다음과 같아야합니다.

Gson gson = new Gson();

String listString = gson.toJson(
                    targetList,
           new TypeToken<ArrayList<targetListItem>>() {}.getType());

 JSONArray jsonArray =  new JSONArray(listString);

public void itemListToJsonConvert(ArrayList<HashMap<String, String>> list) {

        JSONObject jResult = new JSONObject();// main object
        JSONArray jArray = new JSONArray();// /ItemDetail jsonArray

        for (int i = 0; i < list.size(); i++) {
            JSONObject jGroup = new JSONObject();// /sub Object

            try {
                jGroup.put("ItemMasterID", list.get(i).get("ItemMasterID"));
                jGroup.put("ID", list.get(i).get("id"));
                jGroup.put("Name", list.get(i).get("name"));
                jGroup.put("Category", list.get(i).get("category"));

                jArray.put(jGroup);

                // /itemDetail Name is JsonArray Name
                jResult.put("itemDetail", jArray);
                return jResult;
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    }

나는 이미 답을 알고 있지만이 코드를 사용하는 더 나은 해결책이 있습니다.

for ( Field f : context.getFields() ) {
     if ( f.getType() == String.class ) || ( f.getType() == String.class ) ) {
           //DO String To JSON
     }
     /// And so on...
}

이런 식으로 클래스에서 변수를 수동으로 입력하지 않고도 액세스 할 수 있습니다.

더 빠르고 더 나은 .. 이것이 도움이되기를 바랍니다.

건배. :디


당신의 gradle에 추가하십시오 :

implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

변환 ArrayListJsonArray

JsonArray jsonElements = (JsonArray) new Gson().toJsonTree(itemsArrayList);

참고 URL : https://stackoverflow.com/questions/4841952/convert-arraylistmycustomclass-to-jsonarray

반응형