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'
변환 ArrayList
에JsonArray
JsonArray jsonElements = (JsonArray) new Gson().toJsonTree(itemsArrayList);
답변
kotlin과 Gson을 사용하면 더 쉽게 할 수 있습니다.
- 먼저 Gson 종속성을 추가하십시오.
implementation "com.squareup.retrofit2:converter-gson:2.3.0"
- 별도의
kotlin
파일을 만들고 다음 방법을 추가하십시오.
import com.google.gson.Gson import com.google.gson.reflect.TypeToken fun <T> Gson.convertToJsonString(t: T): String { return toJson(t).toString() } fun <T> Gson.convertToModel(jsonString: String, cls: Class<T>): T? { return try { fromJson(jsonString, cls) } catch (e: Exception) { null } } inline fun <reified T> Gson.fromJson(json: String) = this.fromJson<T>(json, object: TypeToken<T>() {}.type)
참고 : 선언 클래스를 추가하지 말고이 메서드 만 추가하면 모든 것이 잘 작동합니다.
- 이제 전화 :
gson의 참조를 만듭니다.
val gson = Gson ()
배열을 json 문자열로 변환하려면 다음을 호출하십시오 .
val jsonString=gson.convertToJsonString(arrayList)
json 문자열에서 배열을 얻으려면 다음을 호출하십시오 .
val arrayList=gson.fromJson<ArrayList<YourModelClassName>>(jsonString)
모델을 json 문자열로 변환하려면 다음을 호출하십시오.
val jsonString=gson.convertToJsonString(model)
json 문자열을 모델로 변환하려면 다음을 호출하십시오.
val model=gson.convertToModel(jsonString, YourModelClassName::class.java)