Json Array를 일반 Java 목록으로 변환
안드로이드 ListView 데이터 바인딩을 위해 JSON Array를 일반 Java Array로 변환할 수 있는 방법이 있습니까?
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
(이메일 주소의 경우)
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());
를 사용할 수 있습니다.String[]
대신ArrayList<String>
:
Array List의 메모리 오버헤드를 줄입니다.
도움이 됐으면 좋겠다!
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length; i++) {
parametersArray[i] = parametersJSONArray.getString(i);
}
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);
}
}
문자열 배열에서도 동작합니다.
여기 더 나은 방법이 있습니다. API에서 데이터를 가져오는 경우입니다.다음으로 JSON을 해석하여 목록 뷰에 로드합니다.
protected void onPostExecute(String result) {
Log.v(TAG + " result);
if (!result.equals("")) {
// Set up variables for API Call
ArrayList<String> list = new ArrayList<String>();
try {
JSONArray jsonArray = new JSONArray(result);
for (int i = 0; i < jsonArray.length(); i++) {
list.add(jsonArray.get(i).toString());
}//end for
} catch (JSONException e) {
Log.e(TAG, "onPostExecute > Try > JSONException => " + e);
e.printStackTrace();
}
adapter = new ArrayAdapter<String>(ListViewData.this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ListView Clicked item index
int itemPosition = position;
// ListView Clicked item value
String itemValue = (String) listView.getItemAtPosition(position);
// Show Alert
Toast.makeText( ListViewData.this, "Position :" + itemPosition + " ListItem : " + itemValue, Toast.LENGTH_LONG).show();
}
});
adapter.notifyDataSetChanged();
adapter.notifyDataSetChanged();
...
변환부터 시작합니다[ JSONArray - > List < 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;
}
next create generic version replace array.getJSONObject(i++) (POJO 포함)
예:
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;
}
를 사용할 수 있습니다.String[]
대신ArrayList<String>
:
도움이 됐으면 좋겠다!
private String[] getStringArray(JSONArray jsonArray) throws JSONException {
if (jsonArray != null) {
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
stringsArray[i] = jsonArray.getString(i);
}
return stringsArray;
} else
return null;
}
간단히 JSON을 읽을 수 있는 문자열로 변환하고 String 클래스의 "split" 메서드를 사용하여 분할할 수 있습니다.
String jsonAsString = yourJsonArray.toString();
//we need to remove the leading and the ending quotes and square brackets
jsonAsString = jsonAsString.substring(2, jsonAsString.length() -2);
//split wherever the String contains ","
String[] jsonAsStringArray = jsonAsString.split("\",\"");
Pentium 10s Post 개선 방법:
포어치 루프를 사용하여 JSON 배열 요소를 목록에 넣었습니다.이렇게 하면 코드가 더 명확해집니다.
ArrayList<String> list = new ArrayList<String>();
JSONArray jsonArray = (JSONArray)jsonObject;
jsonArray.forEach(element -> list.add(element.toString());
private String[] getStringArray(JSONArray jsonArray) throws JSONException {
if (jsonArray != null) {
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
stringsArray[i] = jsonArray.getString(i);
}
return stringsArray;
} else
return null;
}
반복기를 사용할 수 있습니다.
JSONArray exportList = (JSONArray)response.get("exports");
Iterator i = exportList.iterator();
while (i.hasNext()) {
JSONObject export = (JSONObject) i.next();
String name = (String)export.get("name");
}
질문의 대상이 되는 걸로 알고 있습니다.Java
하지만 저는 이 문제를 해결할 수 있는 방법을 공유하고자 합니다.Kotlin
유용하다고 생각하기 때문입니다.
Kotlin을 사용하여 확장 함수를 작성하여 A를 변환할 수 있습니다.JSONArray
네이티브(Kotlin) 어레이:
fun JSONArray.asArray(): Array<Any> {
return Array(this.length()) { this[it] }
}
이제 전화를 걸 수 있습니다.asArray()
에 직접 접속하여JSONArray
사례.
java.util을 사용하면 어떨까요?어레이?
List<String> list = Arrays.asList((String[])jsonArray.toArray())
언급URL : https://stackoverflow.com/questions/3395729/convert-json-array-to-normal-java-list
'programing' 카테고리의 다른 글
특정 컬럼의 값이 NaN인 Panda DataFrame 행을 삭제하는 방법 (0) | 2022.09.29 |
---|---|
JPA/Hibernate에서의 flash()의 올바른 사용 (0) | 2022.09.29 |
.view()는 PyTorch에서 무엇을 합니까? (0) | 2022.09.25 |
HTML "no-js" 클래스의 목적은 무엇입니까? (0) | 2022.09.25 |
배열 목록을 알파벳 순으로 정렬(대문자와 소문자를 구분하지 않음) (0) | 2022.09.25 |