Json Key값 추출 - keys(), Iterator
Json Key값 추출
keys(), Iterator
ㆍ 이번에는 값을 받아서 파싱을 해야하는데 Key값을 모를때
어떻게 알아낼수 있는지 알아보도록 하겠습니다
ㆍ Key값 추출은 JSONObject안의 갯수가 때마다 일정하지
않을때 주로 사용됩니다.
오늘 테스트 해볼
JSON 값입니다
간단하게 메모장으로
써봤습니다.
이런식으로
JSONObject형태로
이루워져있을때
안드로이드쪽에서
서버에 과일의 이름과
가격을 요청합니다
그럼 서버측에서
서버에 저장되어있는
과일의 이름과 가격을
위와 같이 보내줄 수 있습니다.
사과, 바나나, 수박, 복숭아, 딸기
5가지 종류의 과일과 가격이 넘어왔습니다
그런데 서버에 저장되어있는
과일은 실시간으로 어떻게 변할지
모릅니다
이렇게 5천만원짜리
오렌지가 추가될 수도 잇습니다
과일 종류가 5가지에서
6가지로 증가된 것이죠
기존에 해왔던것 처럼
키 값을 알고 있다면
가격을 쉽게 뽑아낼 수 있습니다
그런데 우리가 가지고 있는
고정 key값은 fruit뿐이고
fruit Object안에 있는
Key값과 Value값에 대해서는
아에 정보가 없습니다
이럴때 어떻게 해야 하는지
간단하게 알아보도록
하겠습니다
일단 기본 코드를 작성해보자
이번에는 xml없이
로그로만 찍어서
확인해보도록 하겠습니다
public class MainActivity extends AppCompatActivity
{
String fruitList=
"{" +
"\"fruit\""+":{" +
"\"apple\":\"3000원\"," +
"\"banana\":\"2000원\"," +
"\"watermelon\":\"100원\"," +
"\"peach\":\"500000원\"," +
"\"strawberry\":\"1원\"" +
"}" +
"}";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
일단 테스트해볼
Json 데이터로
위와 적었던 것처럼
과일 5종류의 이름과 가격을
적어주었습니다.
JSON Data -> JSONObject
위의 Json 데이터에는
JSONObject 2개로 구성되어있습니다
중괄호 셋트가 2셋트 잇죠
그리고 우리는 사용하기
편하게 분리를 해야 합니다
중괄호 기준으로 분리해야겠죠
(아 메모장 사진들에 fruit-> "fruit"으로
해야 정확할 것 같군요.. 실수실수..)
코드로 보자면
서버에서 받아온 값을
2가지 JSONObject로 담기 위해서
JSONObject를 생성해보도록 하겠습니다
public class MainActivity extends AppCompatActivity
{
String fruitList=
"{" +
"\"fruit\""+":{" +
"\"apple\":\"3000원\"," +
"\"banana\":\"2000원\"," +
"\"watermelon\":\"100원\"," +
"\"peach\":\"500000원\"," +
"\"strawberry\":\"1원\"" +
"}" +
"}";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
{
JSONObject jsonObject = new JSONObject(fruitList);
String fruitValue = jsonObject.getString("fruit");
JSONObject fruitObject = new JSONObject(fruitValue);
}
catch (JSONException e)
{
e.printStackTrace();
}
}
}
위와 같이
jsonObject, fruitObject
2가지 Object를 생성하였습니다
이제 fruitObject
안에 있는 String을
뽑아내기 위해서
키 값을 알아야되는데
키 값의 이름이 어떤게 될 지 모르고
갯수도 예상할 수 없습니다
JSONObject.keys();
우리는 JSONObject.keys();
를 사용해서 키 값을
알아낼 수 있습니다.
그리고 이 추출한 키 값을
관리해주는 놈이 있습니다.
Iterator
그래서 Iterator한테
key값을 모두 맡기고
우리는 필요할때
Iterator한테
키 값을 달라고 하면 됩니다
이 부분만
코드를 추가해서 보겠습니다
try
{
JSONObject jsonObject = new JSONObject(fruitList);
String fruitValue = jsonObject.getString("fruit");
JSONObject fruitObject = new JSONObject(fruitValue);
Iterator i = fruitObject.keys();
}
Key값을 전부 요청해서 List에 담는다
자 Keys값을 다 뽑아냈으면
이제 Keys의 이름을 List든 배열이든
차곡차곡 담아야 합니다
Iterator에게
반복적으로 키 값 있는거
하나씩 다 내놔!
하면 됩니다
코드로 보면
public class MainActivity extends AppCompatActivity
{
ArrayList<String> fruitKeyList = new ArrayList<>();
String fruitList=
"{" +
"\"fruit\""+":{" +
"\"apple\":\"3000원\"," +
"\"banana\":\"2000원\"," +
"\"watermelon\":\"100원\"," +
"\"peach\":\"500000원\"," +
"\"strawberry\":\"1원\"" +
"}" +
"}";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
{
JSONObject jsonObject = new JSONObject(fruitList);
String fruitValue = jsonObject.getString("fruit");
JSONObject fruitObject = new JSONObject(fruitValue);
Iterator i = fruitObject.keys();
while(i.hasNext())
{
String b = i.next().toString();
Log.d("ITPangpang",b);
fruitKeyList.add(b);
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
}
Arraylist를 하나 추가해주고
Iterator의 Next값이 있으면
While문을 게속 돌려줍니다
String b를 임시저장소로 하나 만들어서
실시간으로 값을 Log로 찍어보고
그 값을 하나하나 Arraylist에 담습니다
찍힌 로그값을 보면
우리가 Key값으로 사용할
과일의 이름이 차례대로
나온 것을 확인 할 수 있습니다.
뽑아낸 Key값으로 다시 Value를 알아내자
자 이제 마무리 단계죠
알아낸 Key값으로 value값을
추출하면 됩니다.
여기서도 리스트에 있는 Key값이
몇개가 될지 모르니
반복문을 써야겠죠
마무리
코드 보겠습니다
public class MainActivity extends AppCompatActivity
{
ArrayList<String> fruitKeyList = new ArrayList<>();
ArrayList<String> fruitValueList = new ArrayList<>();
String fruitList=
"{" +
"\"fruit\""+":{" +
"\"apple\":\"3000원\"," +
"\"banana\":\"2000원\"," +
"\"watermelon\":\"100원\"," +
"\"peach\":\"500000원\"," +
"\"strawberry\":\"1원\"" +
"}" +
"}";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
{
JSONObject jsonObject = new JSONObject(fruitList);
String fruitValue = jsonObject.getString("fruit");
JSONObject fruitObject = new JSONObject(fruitValue);
Iterator i = fruitObject.keys();
while(i.hasNext())
{
String b = i.next().toString();
fruitKeyList.add(b);
}
for(int j = 0; j<fruitKeyList.size();j++)
{
fruitValueList.add(fruitObject.getString(fruitKeyList.get(j)));
Log.d("ITPangpang",(j+1)+"번째 과일이름->"+fruitKeyList.get(j));
Log.d("ITPangpang",(j+1)+"번째 과일가격->"+fruitValueList.get(j));
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
}
Value값이자
과일가격의 목록을 담기위한
ArrayList를 하나 생성하고
이번에는 For문으로 한번
돌려보자면
Key의 갯수만큼 반복문이
돌아야되므로
fruitKeyList.size();
를 적어주시면 됩니다
그 후에
fruitValueList에 과일가격을
하나하나 차곡차곡 담아줍니다
fruitObject.getString(fruitKeyList.get(j));
키 값의 이름을 가져와서 getString으로
뽑아내면 되겠죠
그 다음 제대로 잘 담겼나
마무리 확인 로그도 찍어봤습니다
찍힌 로그를 확인해보죠
잘 담긴것 같습니다
마지막으로 5천만원짜리
오렌지를 추가해서 한번 더
돌려보면서 마무리 하도록
하겠습니다
5천만원 오렌지 추가
public class MainActivity extends AppCompatActivity
{
ArrayList<String> fruitKeyList = new ArrayList<>();
ArrayList<String> fruitValueList = new ArrayList<>();
String fruitList=
"{" +
"\"fruit\""+":{" +
"\"apple\":\"3000원\"," +
"\"banana\":\"2000원\"," +
"\"watermelon\":\"100원\"," +
"\"peach\":\"500000원\"," +
"\"strawberry\":\"1원\"," +
"\"orange\":\"50000000원\"" +
"}" +
"}";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
{
JSONObject jsonObject = new JSONObject(fruitList);
String fruitValue = jsonObject.getString("fruit");
JSONObject fruitObject = new JSONObject(fruitValue);
Iterator i = fruitObject.keys();
while(i.hasNext())
{
String b = i.next().toString();
fruitKeyList.add(b);
}
for(int j = 0; j<fruitKeyList.size();j++)
{
fruitValueList.add(fruitObject.getString(fruitKeyList.get(j)));
Log.d("ITPangpang",(j+1)+"번째 과일이름->"+fruitKeyList.get(j));
Log.d("ITPangpang",(j+1)+"번째 과일가격->"+fruitValueList.get(j));
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
}
끝!
'안드로이드(android) > JSON' 카테고리의 다른 글
JSON 데이터 주고 받기(2)(JSON 파싱) (6) | 2016.10.08 |
---|---|
JSON 데이터 주고 받기(1)(JSON 파싱) (8) | 2016.10.06 |