마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

JSONArray 값 뽑아내는방법 질문

0 추천
{"value":[{"level":"10","id":"가나다"},{"level":"5","id","도레미"}]}

이런 제이슨 데이터가 있다면

이 데이터들을 각각 리스트나 배열에 집어넣으려고하는데 어떻게 추출해야할지 잘 모르겠습니다.

 

사용방법좀 알려주시면 감사하겠습니다.
음무 (17,820 포인트) 님이 2014년 6월 18일 질문

1개의 답변

+4 추천
 
채택된 답변

몇가지 방법이 있습니다.

명명은 올려주신 JSON의 name을 따라가겠습니다.

첫째, JSONObject를 이용하는 방법입니다.

 

Value클래스를 만듭니다.

멤버로는 level과 id가 있습니다.

public class Value {
		private int level;
		private String id;

		public Value(int level, String id) {
			super();
			this.level = level;
			this.id = id;
		}

		public int getLevel() {
			return level;
		}

		public void setLevel(int level) {
			this.level = level;
		}

		public String getId() {
			return id;
		}

		public void setId(String id) {
			this.id = id;
		}

	}

 

이제 parse하는 메서드를 만듭니다.

List<Value> parsePlainJson(String json) throws JSONException {
		JSONArray ja = new JSONObject(json).getJSONArray("value");
		if (ja == null) {
			return null;
		}
		List<Value> list = new LinkedList<Value>();
		int size = ja.length();
		JSONObject jo;
		for (int i = 0; i < size; i++) {
			jo = ja.getJSONObject(i);
			if (jo != null) {
				list.add(new Value(jo.optInt("level"), jo.optString("id")));
			}
		}

		return list;
	}

 

두번째로는 Gson같은 라이브러리를 이용하는 방법입니다.

Gson라이브러리를 libs에 복사합니다.

ADT가 자동으로 다 빌드패스 잡아주겠죠...

 

이제 Value라는 값을 가지는 클래스를 만듭니다.

public class Response{
		private List<Value> value;

		public List<Value> getValue() {
			return value;
		}
		
	}

 

Gson으로 parse합니다.

List<Value> parsePlainJson(String json) {
		Response response = new Gson().fromJson(json, Response.class);
		return response.getValue();
	}

 

 

단순히 level값과 id값을 다른 배열에 넣고 싶다면 이렇게 하면 되겠죠.

private int[] levels;
private String[] ids;

void parsePlainJson(String json) throws JSONException {
		JSONArray ja = new JSONObject(json).getJSONArray("value");
		int size = ja.length();
		levels = new int[size];
		ids = new String[size];
		JSONObject jo;
		for (int i = 0; i < size; i++) {
			jo = ja.getJSONObject(i);
			levels[i] = jo.optInt("level");
			ids[i] = jo.optString("id");
		}
}

 

칠리님 (10,910 포인트) 님이 2014년 6월 18일 답변
음무님이 2014년 6월 18일 채택됨
설명 되게 친절하게 잘 해주시네요 ㅎㅎ 추천드립니다.
...