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);
참고 문헌 :
- jsonarray 생성자 : http://developer.android.com/reference/org/json/JSONArray.html#JSONArray%28java.util.Collection%29
- 컬렉션 : http://developer.android.com/reference/java/util/Collection.html
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'
변환 ArrayList
에JsonArray
JsonArray jsonElements = (JsonArray) new Gson().toJsonTree(itemsArrayList);
참고 URL : https://stackoverflow.com/questions/4841952/convert-arraylistmycustomclass-to-jsonarray
'program story' 카테고리의 다른 글
수직 분할 창에서 Vim 도움말 열기 (0) | 2020.08.05 |
---|---|
값은 null 일 수 없습니다. (0) | 2020.08.05 |
결과를 소문자로 구분하지 않고 대소 문자를 구분하지 않는 목록 정렬? (0) | 2020.08.05 |
기존 SQL Server 로그인을 동일한 이름의 기존 SQL Server 데이터베이스 사용자에 연결하는 방법 (0) | 2020.08.05 |
코드에서 WPF 레이블에 텍스트를 추가하는 방법은 무엇입니까? (0) | 2020.08.05 |