본문 바로가기

JSON/Java API for JSON

Java API for JSON

원문참조:http://www.oracle.com/technetwork/articles/java/json-1973242.html

Download Java API for JSON : https://jsonp.java.net/

javax.json-api-1.0.jar



JSON (JavaScript Object Notation)은 Javascript 에서 객체를 표현하기 위한 표기법이다.

자바스크립트에서 JSON은 2가지 형태의 구조화된 데이터를 표현할 수 있다.


JSON 표기법으로 표현 가능한 2가지 형태의 구조화된 데이터


1. 오브젝트 : 색인이 없는 속성을 가진 데이터. 즉, 오브젝트 내의 속성들에 접근할 때는 색인을 사용하지 않고 값에 붙여진 이름을 사용한다.

   - 다른 언어에서는 연관배열이라고도 한다.

   예) var usrInfo = { 'name':'Smith', 'phone':'010-214-9512', 'num':1004 }

        alert ( '사용자 이름=' + userInfo.name );


2. 배열 : 원소가 색인을 가지며 원소에 접근할 때는 색인을 사용하여 순서대로 접근이 가능하다 

    예) var arrName = [ 'Smith', 'John', 'Scott' ];

         alert ( '2번 이용자=' + arrName[1] );


참고: 오브젝트의 속성 값으로 배열이 사용될 수도 있고, 배열의 원소로서 오브젝트가 사용될 수도 있다. 또한 오브젝트의 속성 값으로 다른 오브젝트가 사용될 수도 있고 배열의 원소로서 다른 배열이 사용될 수도 있다


Java API for JSON Processing (JSR 353)

JSON 문자열을 처리하기 위해서 2가지 방식의 API를 제공한다

Download : https://jsonp.java.net/


1. Object Model API

   - JSON 문자열을 자바의 오브젝트로 표현하고 오브젝트 안에 또 다른 오브젝트가 트리구조로 저장되는 형태이다. XML에서의 DOM 과 비슷한 개념이다.


Main classes in the object model API

Class or InterfaceDescription
JsonContains static methods to create JSON readers, writers, builders, and their factory objects.
JsonGeneratorWrites JSON data to a stream one value at a time.
JsonReaderReads JSON data from a stream and creates an object model in memory.
JsonObjectBuilder
JsonArrayBuilder
Create an object model or an array model in memory by adding values from application code.
JsonWriterWrites an object model from memory to a stream.
JsonValue
JsonObject
JsonArray
JsonString
JsonNumber
Represent data types for values in JSON data.



2. Streaming API

   - JSON 문자열을 읽어오면서(Parsing) 발생하는 이벤트를 기반으로 JSON객체의 속성 값들을 확인하여 처리하는 방식이며 XML 에서의 SAX 와 비슷한 개념이다.


 Main classes in the streaming API

Class or InterfaceDescription
JsonContains static methods to create JSON parsers, generators, and their factory objects.
JsonParserRepresents an event-based parser that can read JSON data from a stream.
JsonGeneratorWrites JSON data to a stream one value at a time



Object Model API 사용 예

JSON으로 표현된 오브젝트 샘플

1 {
2     "data" : [
3         { "from" : { "name" : "xxx", ... }, "message" : "yyy", ... },
4         { "from" : { "name" : "ppp", ... }, "message" : "qqq", ... },
5         ...
6     ],
7     ...
8 }

위와 같이 JSON으로 표현한 오브젝트가 있다고 할 때, 이를 Object Model API를 사용하여 처리한다면 ....


1 URL url = new URL("https://graph.facebook.com/search?q=java&type=post"); 2 try (InputStream is = url.openStream(); 3 JsonReader rdr = Json.createReader(is)) { 4 5 JsonObject obj = rdr.readObject(); 6 JsonArray results = obj.getJsonArray("data"); 7 for (JsonObject result : results.getValuesAs(JsonObject.class)) { 8 System.out.print(result.getJsonObject("from").getString("name")); 9 System.out.print(": "); 10 System.out.println(result.getString("message", "")); 11 System.out.println("-----------"); 12 } 13 }



Streaming API 사용 예


1 URL url = new URL("https://graph.facebook.com/search?q=java&type=post");
2 try (InputStream is = url.openStream();
3      JsonParser parser = Json.createParser(is)) {
4     while (parser.hasNext()) {
5         Event e = parser.next();
6         if (e == Event.KEY_NAME) {
7             switch (parser.getString()) {
8                 case "name":
9                     parser.next();
10                    System.out.print(parser.getString());
11                    System.out.print(": ");
12                    break;
13                case "message":
14                    parser.next();
15                    System.out.println(parser.getString());
16                    System.out.println("---------");
17                    break;
18             }
19         }
20     }
21 }