답변:
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.get(i)
구문 분석의 결과로 null을 반환 하면 어떻게됩니까 [ "String 1", null, "String 2" ]
? 그렇다면 루프 충돌이 발생하지 않습니까?
size()
대신에 필요할 수 있습니다 length()
.
아직 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) );
}
어쩌면 그것은 해결 방법 일뿐이지만 (매우 효율적이지는 않지만) 다음과 같이 할 수 있습니다.
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);
}
나는 질문이 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;
}
다음으로 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;
}
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 클래스의 "분할"메소드를 사용하여 분할 할 수 있습니다.
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("\",\"");
java.util.Arrays는 어떻습니까?
List<String> list = Arrays.asList((String[])jsonArray.toArray())
toArray()
방법 이 없습니다 JSONArray()
. json.org/javadoc/org/json/JSONArray.html 이 질문은 아마도 간단한 질문이 없었을 것 toArray()
입니다.
org.JSONArray
후드 아래에서 ArrayList 를 사용 한다는 것입니다The arrayList where the JSONArray's properties are kept
. 따라서 대부분의 루핑은 많은 경우 (캡슐화를 위해) 아무 것도 수행되지 않습니다.