json



이런 Json배열 하나에 여러개의 Json이 있다고 가정했을 때


Json 값마다 있는 idx,link,description 키값을 사용해 데이터를 저장해보았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
String eventArray = null//Json Array를 String으로 저장하기 위한 변수 선언
try {
    eventArray = loadHtml(); //loadHtml()는 Json Array를 파싱해서 String으로 가져오는 함수라 가정
catch (InterruptedException e) {
    e.printStackTrace();
}
System.out.println("결과물 : " + eventArray);
try {
    JSONArray array = new JSONArray(eventArray); //JSONArray형식으로 파싱하기 위해 새로 선언해주며 eventArray를 집어 넣어준다.
    list_cnt = array.length(); //Json 배열 내 JSON 데이터 개수를 가져옴
 
    //key의 value를 가져와 저장하기 위한 배열을 생성한다
    getDescription = new String[list_cnt]; //decription 저장용
    getLink = new String[list_cnt]; //link 저장용
    getImageUrl = new String[list_cnt]; //imageUrl 저장용
 
    for (int i = 0; i < list_cnt; i++) { //JSONArray 내 json 개수만큼 for문 동작
 
        JSONObject jsonObject = array.getJSONObject(i); //i번째 Json데이터를 가져옴
        getDescription[i] = jsonObject.getString("description");  //descripton 값을 배열에 저장
        getLink[i] = jsonObject.getString("link");  //link 값을 배열에 저장
        getImageUrl[i] = jsonObject.getString("imageUrl");  //imageurl 값을 배열에 저장
        Log.i("JSON Object", jsonObject + "");
        Log.i("JsonParsing", getDescription[i] + "," + getLink[i] + "," + getImageUrl[i]);
 
    }
cs


Log로 찍어보면

JsonObject의 로그

I/JSON Object: {"idx":15858,"imageUrl":"http:\/\/img.cgv.co.kr\/Event\/Event\/2017\/0330\/some_240x200_01.jpg","link":".\/detail-view.aspx?idx=15858&menu=2","description":"<어느날>1+1 예매 이벤트"}


파싱해낸 데이터 description, link, imageUrl 순으로 파싱이 된 걸 볼 수 있다.

I/JsonParsing: <어느날>1+1 예매 이벤트,./detail-view.aspx?idx=15858&menu=2,http://img.cgv.co.kr/Event/Event/2017/0330/some_240x200_01.jpg


배열에 잘 들어갔는지 description을 예로 확인을 해보면

for(int i=0;i<description.length;i++){
System.out.println("배열값 : "+description[i]);
}


I/System.out: 배열값 : <시간위의 집>스타★라이브톡

I/System.out: 배열값 : <보통사람>1+1 예매권 2차 이벤트

I/System.out: 배열값 : <로즈> 기대평 이벤트

I/System.out: 배열값 : <공각기동대:고스트 인 더 쉘>예매 경품 이벤트


description 값만 따로 배열에 잘 들어가있음을 확인할 수 있다.


이제 파싱해낸 값으로 다양한 곳에 쓸 수 있다.



  1. 2018.01.22 23:10

    비밀댓글입니다

    • yonoo88 2018.01.23 18:32 신고

      안녕하세요. 저도 오래전 코드라 기억이 잘 나질 않네요. 개발이 일이 아닌터라 코드는 저게 전부여서요. 도움이 못되어서 죄송합니다.

Json의 이해

2013.11.05 11:30

만들고자 하는 구조는

{

  "j1":{

        "j2":{

"arr1":[{"j3":"a"},{"j4":"b"}]

              }

        }

}


이런 유형의 구조이다. 그렇다면 필요한 코드는

ObjectNode json = json.newObject();

ObjectNode j1 = json.newObject();

ObjectNode j2 = json.newObject();

ObjectNode arr1 = json.newObject();

ObjectNode j3 = json.newObject();

ObjectNode j4 = json.newObject();

ArrayNode array = null;


이렇게 한 뒤 구현하려면 역순으로 구현한다.


json객체 생성

j3.put("j3","a"); --> {"j3":"a"}

j4.put("j4","b"); --> {"j4":"b"}


json객체를 array라는 배열에 삽입

array.add(j3); --> [{"j3":"a"}]

array.add(j4); --> [{"j3":"a"},{"j4":"b"}]


array배열을 arr1이라는 key로 arr1 jsonobject에 삽입

arr1.put("arr1",array) 

--> {arr1:[{"j3":"a"},{"j4":"b"}]}


arr1 jsonObject를 j2라는 key로 j2 jsonObject에 삽입

j2.put("j2",arr1);

--> {j2:{"arr1":[{"j3":"a"},{"j4":"b"}]}}


j2 jsonObject를 j1라는 key로 j1 jsonObject에 삽입

j1.put("j1",j2);

--> {"j1":{"j2":{"arr1":[{"j3":"a"},{"j4":"b"}]}}}


이렇게 된다.

역순으로 jsonObject생성해서 배열에 넣고,

그 배열을 jsonobject 생성해서 집어넣고,

그걸 또 jsonObject에 넣는 역순이다.


위 소스를 쉽게쓰면



ObjectNode json1;
ObjectNode json2;
ObjectNode json3;
arrayNode arr = null;

json3 = json.newObject();
json3.put("j3","a");
arr.add(json3);
json3 = json.newObject(); 
/*
여기서 json3은 객체 새로 생성안하면
{"j3":"a", "j4", "b"}가 되고,
객체를 새로 생성하면
{"j4":"b"}가 된다.
초기화 안하면 아래 arr.add에서 
{"j3":"a"},{"j3":"a","j4":"b"} 로 들어가게된다.
*/
json3.put("j4","b");
arr.add(json3);

json3 = json.newObject();
json3.put("arr1",arr);

json2 = json.newObject();
json2.put("j2",json3);

json1 = json.newObject();
json1.put("j1",json2);



이런 식이다. 간단한거 같은데 많이 헷갈린다;;







ObjectNode 와 JsonNode의 차이가 뭔지 몰랐는데 이런 차이라고 한다.



Json으로 나타난 정보에서


[ ]

표시로 시작되는 건 배열이기 때문에 Arraynode 이며


{ }

표시로 시작하는 건 Json 값이기 때문에 JsonNode 이다



그런데 JsonNode는 값을 불러올 수는 있지만 넣을 수는 없기 때문에


값을 넣기 위해서는 ObjectNode를 사용한다.


ObjectNode는 값을 불러오고 넣을 수도 있다.



요약하면


JsonNode 는 값을 읽을 수만 있고 ObjectNode는 값을 읽고 쓸 수 있다.


Json 사용법 링크

http://yonoo88.tistory.com/322









'지식메모 > JAVA' 카테고리의 다른 글

숫자 천단위 콤마 입력하기  (0) 2014.09.25
Json의 이해  (0) 2013.11.05
대문자 소문자 서로 변환하기  (0) 2013.10.08
java 문자열 구분자로 자르기  (0) 2013.10.02
ObjectNode 와 JsonNode 차이?  (0) 2013.09.06
mp3 ID3 v2 태그 파싱하기  (2) 2013.08.27

+ Recent posts

티스토리 툴바