JSON-Java (org.json) 소개

1. JSON-Java 소개

JSON (JavaScript Object Notation의 약어)은 가벼운 데이터 교환 형식이며 클라이언트-서버 통신에 가장 일반적으로 사용됩니다. 읽기 / 쓰기가 쉽고 언어 독립적입니다. JSON 값은 다른 JSON 개체, 배열, 숫자, 문자열, 부울 (true / false) 또는 null 일 수 있습니다.

이 튜토리얼에서는 사용 가능한 JSON 처리 라이브러리 중 하나를 사용하여 JSON을 생성, 조작 및 구문 분석하는 방법을 살펴 봅니다. 즉, JSON-Java 라이브러리는 org.json 이라고도합니다 .

2. 전제 조건

시작하기 전에 pom.xml에 다음 종속성을 추가해야합니다 .

 org.json json 20180130 

최신 버전은 Maven Central 저장소에서 찾을 수 있습니다.

이 패키지는 이미 Android SDK에 포함되어 있으므로 동일한 패키지를 사용하는 동안 포함해서는 안됩니다.

3. 자바의 JSON [패키지 org.json]

JSON-Java 라이브러리는 org.json으로 도 알려져 있습니다 (구글의 org.json.simple과 혼동하지 말 것)는 Java에서 JSON을 구문 분석하고 조작하는 데 사용되는 클래스를 제공합니다.

또한이 라이브러리는 JSON, XML, HTTP 헤더, 쿠키, 쉼표로 구분 된 목록 또는 텍스트 등간에 변환 할 수도 있습니다.

이 자습서에서는 다음을 살펴 봅니다.

  1. JSONObject –정렬되지 않은 키-값 쌍을 저장하는 Java의 기본 Map 유사 객체
  2. JSONArray – Java의 기본 벡터 구현과 유사한 순서가 지정된 값 시퀀스
  3. JSONTokener JSONObject 또는 JSONArray 에서 JSON 문자열을 구문 분석하는 데 사용할 수있는 일련의 토큰 으로 텍스트를 분할하는 도구
  4. CDL – 쉼표로 구분 된 텍스트를 JSONArray로 또는 그 반대로변환하는 방법을 제공하는 도구
  5. 쿠키 – JSON 문자열 에서 쿠키로 또는 그 반대로 변환
  6. HTTP – JSON 문자열 에서 HTTP 헤더로 또는 그 반대로변환하는 데 사용됩니다.
  7. JSONException –이 라이브러리에서 발생하는 표준 예외입니다.

4. JSONObject

된 JSONObject는 자바의 기본 닮은 키와 값 쌍의 정렬되지 않은 모음입니다 지도 구현을.

  • 키는 null 일 수없는 고유 한 문자열 입니다.
  • 값은 Boolean , Number , String , JSONArray 또는 JSONObject.NULL 객체 일 수 있습니다.
  • 된 JSONObject는 a로 표현 될 수있는 문자열 콜론으로 구분 키와 값 중괄호 내에 봉입 한 쌍은 쉼표로 구분
  • JSONObject 를 생성하는 데 사용할 여러 생성자가 있습니다.

또한 다음과 같은 주요 방법을 지원합니다.

  1. get (String key) – 제공된 키와 연관된 객체를 가져오고 키를 찾을 수없는 경우 JSONException을 발생시킵니다.
  2. opt (String key)- 제공된 키와 관련된 객체를 가져오고, 그렇지 않으면 null
  3. put (String key, Object value) – 현재 JSONObject 에 키-값 쌍을 삽입하거나 대체합니다 .

풋 () 메소드는 타입 키 받아들이 과부하 방법 문자열 값 및 여러 유형.

JSONObject 에서 지원하는 전체 메서드 목록은 공식 문서를 참조하세요.

이제이 클래스에서 지원하는 몇 가지 주요 작업에 대해 설명하겠습니다.

4.1. JSONObject 에서 직접 JSON 생성

JSONObject 는 Java의 Map 인터페이스 와 유사한 API를 제공합니다 . put () 메서드를 사용하고 키와 값을 인수로 제공 할 수 있습니다 .

JSONObject jo = new JSONObject(); jo.put("name", "jon doe"); jo.put("age", "22"); jo.put("city", "chicago");

이제 JSONObject 는 다음과 같습니다.

{"city":"chicago","name":"jon doe","age":"22"}

JSONObject.put () 메서드 의 오버로드 된 서명에는 7 가지가 있습니다 . 키는 고유하고 null이 아닌 문자열 만 될 수 있지만 값은 무엇이든 될 수 있습니다.

4.2. 지도에서 JSON 생성

JSONObject 에 키와 값을 직접 넣는 대신 사용자 지정 을 생성 한 다음 JSONObject 생성자에 인수로 전달할 수 있습니다.

이 예는 위와 동일한 결과를 생성합니다.

Map map = new HashMap(); map.put("name", "jon doe"); map.put("age", "22"); map.put("city", "chicago"); JSONObject jo = new JSONObject(map);

4.3. JSON 문자열 에서 JSONObject 만들기

JSON StringJSONObject로 구문 분석하려면 String 을 생성자에 전달하기 만하면 됩니다.

이 예는 위와 동일한 결과를 생성합니다.

JSONObject jo = new JSONObject( "{\"city\":\"chicago\",\"name\":\"jon doe\",\"age\":\"22\"}" );

전달 된 String 인수는 유효한 JSON이어야합니다. 그렇지 않으면이 생성자가 JSONException을 throw 할 수 있습니다 .

4.4. Java 개체를 JSON으로 직렬화

JSONObject 의 생성자 중 하나는 POJO를 인수로 사용합니다. 아래 예제에서 패키지는 DemoBean 클래스 의 getter를 사용하고 이에 대한 적절한 JSONObject 를 만듭니다 .

To get a JSONObject from a Java Object, we'll have to use a class that is a valid Java Bean:

DemoBean demo = new DemoBean(); demo.setId(1); demo.setName("lorem ipsum"); demo.setActive(true); JSONObject jo = new JSONObject(demo);

The JSONObject jo for this example is going to be:

{"name":"lorem ipsum","active":true,"id":1}

Although we have a way to serialize a Java object to JSON string, there is no way to convert it back using this library.

If we want that kind of flexibility, we can switch to other libraries such as Jackson.

5. JSONArray

A JSONArray is an ordered collection of values, resembling Java's native Vector implementation.

  • Values can be anything from a Number, String, Boolean, JSONArray, JSONObject or even a JSONObject.NULL object
  • It's represented by a String wrapped within Square Brackets and consists of a collection of values separated by commas
  • Like JSONObject, it has a constructor that accepts a source String and parses it to construct a JSONArray

The following are the primary methods of the JSONArray class:

  1. get(int index) – returns the value at the specified index(between 0 and total length – 1), otherwise throws a JSONException
  2. opt(int index) – returns the value associated with an index (between 0 and total length – 1). If there's no value at that index, then a null is returned
  3. put(Object value) – append an object value to this JSONArray. This method is overloaded and supports a wide range of data types

For a complete list of methods supported by JSONArray, visit the official documentation.

5.1. Creating JSONArray

Once we've initialized a JSONArray object, we can simply add and retrieve elements using the put() and get() methods:

JSONArray ja = new JSONArray(); ja.put(Boolean.TRUE); ja.put("lorem ipsum"); JSONObject jo = new JSONObject(); jo.put("name", "jon doe"); jo.put("age", "22"); jo.put("city", "chicago"); ja.put(jo);

Following would be contents of our JSONArray(code is formatted for clarity):

[ true, "lorem ipsum", { "city": "chicago", "name": "jon doe", "age": "22" } ]

5.2. Creating JSONArray Directly from JSON String

Like JSONObject the JSONArray also has a constructor that creates a Java object directly from a JSON String:

JSONArray ja = new JSONArray("[true, \"lorem ipsum\", 215]");

This constructor may throw a JSONException if the source String isn't a valid JSON String.

5.3. Creating JSONArray Directly from a Collection or an Array

The constructor of JSONArray also supports collection and array objects as arguments.

We simply pass them as an argument to the constructor and it will return a JSONArray object:

List list = new ArrayList(); list.add("California"); list.add("Texas"); list.add("Hawaii"); list.add("Alaska"); JSONArray ja = new JSONArray(list);

Now our JSONArray consists of:

["California","Texas","Hawaii","Alaska"]

6. JSONTokener

A JSONTokener takes a source String as input to its constructor and extracts characters and tokens from it. It's used internally by classes of this package (like JSONObject, JSONArray) to parse JSON Strings.

There may not be many situations where we'll directly use this class as the same functionality can be achieved using other simpler methods (like string.toCharArray()):

JSONTokener jt = new JSONTokener("lorem"); while(jt.more()) { Log.info(jt.next()); }

Now we can access a JSONTokener like an iterator, using the more() method to check if there are any remaining elements and next() to access the next element.

The tokens received from the previous example will be:

l o r e m

7. CDL

We're provided with a CDL (Comma Delimited List) class to convert comma delimited text into a JSONArray and vice versa.

7.1. Producing JSONArray Directly from Comma Delimited Text

In order to produce a JSONArray directly from the comma-delimited text, we can use the static method rowToJSONArray() which accepts a JSONTokener:

JSONArray ja = CDL.rowToJSONArray(new JSONTokener("England, USA, Canada"));

Our JSONArray now consists of:

["England","USA","Canada"]

7.2. Producing Comma Delimited Text from JSONArray

In order to reverse of the previous step and get back the comma-delimited text from JSONArray, we can use:

JSONArray ja = new JSONArray("[\"England\",\"USA\",\"Canada\"]"); String cdt = CDL.rowToString(ja);

The Stringcdt now contains:

England,USA,Canada

7.3. Producing JSONArray of JSONObjects Using Comma Delimited Text

To produce a JSONArray of JSONObjects, we'll use a text String containing both headers and data separated by commas.

The different lines are separated using a carriage return (\r) or line feed (\n).

The first line is interpreted as a list of headers and all the subsequent lines are treated as data:

String string = "name, city, age \n" + "john, chicago, 22 \n" + "gary, florida, 35 \n" + "sal, vegas, 18"; JSONArray result = CDL.toJSONArray(string);

The object JSONArray result now consists of (output formatted for the sake of clarity):

[ { "name": "john", "city": "chicago", "age": "22" }, { "name": "gary", "city": "florida", "age": "35" }, { "name": "sal", "city": "vegas", "age": "18" } ]

Notice that in this example, both data and header were supplied within the same String.There's an alternative way of doing this where we can achieve the same functionality by supplying a JSONArray that would be used to get the headers and a comma-delimited String working as the data.

Different lines are separated using a carriage return (\r) or line feed (\n):

JSONArray ja = new JSONArray(); ja.put("name"); ja.put("city"); ja.put("age"); String string = "john, chicago, 22 \n" + "gary, florida, 35 \n" + "sal, vegas, 18"; JSONArray result = CDL.toJSONArray(ja, string);

Here we'll get the contents of object result exactly as before.

8. Cookie

The Cookie class deals with web browser cookies and has methods to convert a browser cookie into a JSONObject and vice versa.

Here are the main methods of the Cookie class:

  1. toJsonObject(String sourceCookie) – converts a cookie string into a JSONObject

  2. toString(JSONObject jo) – this is reverse of the previous method, converts a JSONObject into a cookie String.

8.1. Converting a Cookie String into a JSONObject

To convert a cookie String to a JSONObject, well use the static method Cookie.toJSONObject():

String cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"; JSONObject cookieJO = Cookie.toJSONObject(cookie);

8.2. Converting a JSONObject into Cookie String

Now we'll convert a JSONObject into cookie String. This is reverse of the previous step:

String cookie = Cookie.toString(cookieJO);

9. HTTP

The HTTP class contains static methods that are used to convert HTTP headers to JSONObject and vice versa.

This class also has two main methods:

  1. toJsonObject(String sourceHttpHeader) – converts a HttpHeader String to JSONObject
  2. toString(JSONObject jo) – converts the supplied JSONObject to String

9.1. Converting JSONObject to HTTP Header

HTTP.toString() method is used to convert a JSONObject to HTTP header String:

JSONObject jo = new JSONObject(); jo.put("Method", "POST"); jo.put("Request-URI", "//www.example.com/"); jo.put("HTTP-Version", "HTTP/1.1"); String httpStr = HTTP.toString(jo);

Here, our String httpStr will consist of:

POST "//www.example.com/" HTTP/1.1

Note that while converting an HTTP request header, the JSONObject must contain “Method”,“Request-URI” and “HTTP-Version” keys, whereas, for response header, the object must contain “HTTP-Version”,“Status-Code” and “Reason-Phrase” parameters.

9.2. Converting HTTP Header String Back to JSONObject

Here we will convert the HTTP string that we got in the previous step back to the very JSONObject that we created in that step:

JSONObject obj = HTTP.toJSONObject("POST \"//www.example.com/\" HTTP/1.1");

10. JSONException

The JSONException is the standard exception thrown by this package whenever any error is encountered.

이 패키지의 모든 클래스에서 사용됩니다. 예외는 일반적으로 정확히 무엇이 잘못되었는지를 나타내는 메시지가 뒤 따릅니다.

11. 결론

이 자습서에서는 Java ( org.json)를 사용하는 JSON을 살펴보고 여기에서 사용할 수있는 몇 가지 핵심 기능에 집중했습니다.

이 기사에 사용 된 전체 코드 스 니펫은 GitHub에서 찾을 수 있습니다.