원문참조:http://www.oracle.com/technetwork/articles/java/json-1973242.html
Download Java API for JSON : https://jsonp.java.net/
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 Interface | Description |
---|---|
Json | Contains static methods to create JSON readers, writers, builders, and their factory objects. |
JsonGenerator | Writes JSON data to a stream one value at a time. |
JsonReader | Reads 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. |
JsonWriter | Writes 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 Interface | Description |
---|---|
Json | Contains static methods to create JSON parsers, generators, and their factory objects. |
JsonParser | Represents an event-based parser that can read JSON data from a stream. |
JsonGenerator | Writes 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 }