안드로이드 ListView 데이터 바인딩을 위해 JSON 배열을 일반 Java 배열로 변환하는 방법이 있습니까?
답변
ArrayList<String> list = new ArrayList<String>();
JSONArray jsonArray = (JSONArray)jsonObject;
if (jsonArray != null) {
int len = jsonArray.length();
for (int i=0;i<len;i++){
list.add(jsonArray.get(i).toString());
}
}
답변
아직 JSONArray 객체가 없으면
JSONArray jsonArray = new JSONArray(jsonArrayString);
그런 다음 루프를 반복하여 자체 배열을 작성하십시오. 이 코드는 문자열 배열이라고 가정하므로 특정 배열 구조에 맞게 수정하기가 어렵지 않습니다.
List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
list.add( jsonArray.getString(i) );
}
답변
번들로 제공되는 org.json
라이브러리 를 사용하는 대신 Jackson 또는 GSON을 사용하십시오. 잭슨의 경우 f.ex :
List<String> list = new ObjectMapper().readValue(json, List.class);
// Or for array:
String[] array = mapper.readValue(json, String[].class);
답변
어쩌면 그것은 해결 방법 일뿐이지만 (매우 효율적이지는 않지만) 다음과 같이 할 수 있습니다.
String[] resultingArray = yourJSONarray.join(",").split(",");
분명히 ‘ ,
‘구분 기호 를 원하는대로 바꿀 수 있습니다 ( JSONArray
이메일 주소가 있습니다)
답변
사용하는 String[]
대신 다음을 사용할 수 있습니다 ArrayList<String>
.
ArrayList의 메모리 오버 헤드가 줄어 듭니다.
그것이 도움이되기를 바랍니다!
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
parametersArray[i] = parametersJSONArray.getString(i);
}
답변
Java Streams를 사용 IntStream
하면 객체 매핑을 사용할 수 있습니다 .
JSONArray array = new JSONArray(jsonString);
List<String> result = IntStream.range(0, array.length())
.mapToObj(array::get)
.map(Object::toString)
.collect(Collectors.toList());
답변
나는 질문이 JSONArray에 관한 것이라는 것을 알고 있지만 여기에 JSONArray를 사용하여 JSONObject에서 객체를 추출 할 필요가없는 경우 유용한 예제가 있습니다.
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
String jsonStr = "{\"types\":[1, 2]}";
JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
List<Long> list = (List<Long>) json.get("types");
if (list != null) {
for (Long s : list) {
System.out.println(s);
}
}
문자열 배열에서도 작동