1 JSON-Javaの紹介

JSON(JavaScript Object Notationの頭字語)は軽量のデータ交換フォーマットで、クライアントサーバー間の通信に最も一般的に使用されています。 JSON値は、別のJSON

object、array、number、string、boolean

(true/false)、または

null.

にすることができます。

このチュートリアルでは、利用可能なJSON処理ライブラリの1つを使用して、JSONを作成、操作、解析する方法を説明します。ライブラリは__org.jsonとも呼ばれます。


2前提条件

始める前に、

pom.xml

に次の依存関係を追加する必要があります。

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>

最新版はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.json%22%20AND%20a%3A%22json%22[Maven Centralリポジトリにあります。]

このパッケージはすでにAndroid SDKに含まれているため、同じパッケージを使用している間は含めないでください。


3 JavaにおけるJSON[パッケージorg.json]


JSON-Java

ライブラリは

org.json

としても知られています(Googleのhttps://code.google.com/archive/と混同しないでください)。 p/json-simple/[org.json.simple])は、JavaでJSONを解析および操作するために使用されるクラスを提供します。

さらに、このライブラリはJSON、XML、HTTPヘッダ、クッキー、カンマ区切りリスト、テキストなどの間で変換することもできます。

このチュートリアルでは、以下を見ていきます。



  1. JSONObject


    – Javaのネイティブの

    Map

    類似オブジェクトに似ています.

順不同のキーと値のペアを格納します



JSONArray


– Javaのネイティブに似た値の順序付きシーケンス

ベクトル実装



JSONTokener


– テキストを一連のテキストに分割するツール

JSONを解析するために

JSONObject

または

JSONArray

で使用できる

tokens

ひも



CDL


– コンマ区切りテキストを変換するためのメソッドを提供するツール


JSONArray

に、またはその逆に



Cookie


– JSONの

String

からcookieへの変換、およびその逆の変換



  1. HTTP


    – JSONの

    String

    からHTTPヘッダーへの変換に使用されます.

その逆



JSONException


– これはこれによってスローされる標準的な例外です。

としょうかん


4

JSONObject




  • JSONObject


    は、Javaのネイティブの

    Map

    実装に似た、順序付けられていないキーと値のペアのコレクションです。

  • ** キーは

    null

    にはできない一意の__Stringです

  • ** 値は

    Boolean



    Number



    String

    のいずれでもかまいません。


JSONArray

または

JSONObject.NULL

オブジェクト



JSONObject

は、波括弧で囲まれた

String

で表すことができます。

コロンとキーで区切られたキーと値、そしてで区切られたペア
コンマ
**

JSONObject

を構成するためのコンストラクタがいくつかあります。

以下の主なメソッドもサポートしています。


  1. __get(String key) – 指定されたオブジェクトに関連付けられているオブジェクトをg

    __etsする

キーが見つからない場合は

JSONException

をスローします。


__opt(String key) – 指定されたキーに関連付けられたオブジェクトをg

__etsします。

それ以外の場合は

null

。 __put(String key、Object value) – キーと値のペアを挿入または置換します。

現在の

JSONObject.


put()

メソッドは

String

型のキーとその値に複数の型を受け取る多重定義メソッドです。


JSONObject

でサポートされているメソッドの完全なリストについては、http://stleary.github.io/JSON-java/org/json/JSONObject.html[公式文書をご覧ください。]

それでは、このクラスでサポートされている主な操作について説明しましょう。


4.1.

JSONObject


から直接JSONを作成する


JSONObject

は、Javaの

Map

インタフェースに似たAPIを公開します。

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以外の__Stringだけになりますが、値は任意になります。


4.2. Map

からJSONを作成する

キーと値を直接

JSONObject

に入れる代わりに、カスタム

Map

を作成し、それを引数として

JSONObject

のコンストラクタに渡すことができます。

この例は上記と同じ結果になります。

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


4.3. JSON

String


から

JSONObject

を作成する

JSONの

String



JSONObject

に解析するには、コンストラクタに

String

を渡すだけです。

この例は上記と同じ結果になります。

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

渡された

String

引数は有効なJSONでなければなりません。そうでない場合、このコンストラクタは

JSONException

をスローする可能性があります。


4.4. JavaオブジェクトをJSON

にシリアライズする


__JSONObjectのコンストラクタの1つは引数としてPOJOを取ります。以下の例では、パッケージは

DemoBean

クラスのゲッターを使用して、それに適切な

JSONObject__を作成します。

Javaオブジェクトから

JSONObject

を取得するには、有効なhttps://en.wikipedia.org/wiki/JavaBeans[Java Bean]のクラスを使用する必要があります。

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

JSONObject jo = new JSONObject(demo);

この例の

JSONObject jo

は次のようになります。

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

JavaオブジェクトをJSON文字列にシリアル化する方法はありますが、このライブラリを使って変換する方法はありません。

そのような柔軟性が必要な場合は、

Jackson

などの他のライブラリに切り替えることができます。


5

JSONArray




  • JSONArray


    は、Javaのネイティブの

    Vector

    実装に似た順序付けられた値の集まりです。

  • 値は

    Number



    String



    Boolean


JSONArray



JSONObject

、さらには

JSONObject.NULL

オブジェクト
** 角括弧で囲まれた

String

で表されます。

コンマで区切られた値の集まりで構成されています
**

JSONObject

と同様に、ソースを受け取るコンストラクタがあります

String

それを解析して

JSONArray

を作成します。

以下は

JSONArray

クラスの主なメソッドです。

  1. ____get(int index) – 指定されたインデックスの値を返す

0および全長 – 1)、それ以外の場合は

JSONException

がスローされる


opt(int index)

– インデックスに関連付けられた値を返します

0と全長 – 1)そのインデックスに値がない場合は、

null

が返される


put(Object value)

– この__JSONArrayにオブジェクト値を追加します。

メソッドはオーバーロードされており、広範囲のデータ型をサポートします。

JSONArrayでサポートされているメソッドの完全なリストについては、http://stleary.github.io/JSON-java/org/json/JSONArray.html[公式文書を参照]


5.1.

JSONArray


を作成しています

JSONArrayオブジェクトを初期化したら、

put()

メソッドと

get()

メソッドを使用して要素を追加および取得できます。

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);

以下は

JSONArray

の内容です(コードは明確にするためにフォーマットされています)。

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


5.2. JSON String

から直接

JSONArray

を作成する


JSONObject

と同様に、

JSONArray

にはJSON

String

から直接Javaオブジェクトを作成するコンストラクタもあります。

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

ソースの

String

が有効なJSONの

String

ではない場合、このコンストラクターは

JSONException

をスローすることがあります。


5.3. コレクションまたは配列から直接

JSONArray

を作成する


JSONArray

のコンストラクタは、引数としてコレクションおよび配列オブジェクトもサポートします。

それらを単にコンストラクタの引数として渡すと、

JSONArray

オブジェクトが返されます。

List<String> list = new ArrayList<>();
list.add("California");
list.add("Texas");
list.add("Hawaii");
list.add("Alaska");

JSONArray ja = new JSONArray(list);

現在の

JSONArray

は、

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


6.



JSONTokener




JSONTokener


は、ソース

String

をそのコンストラクタへの入力として受け取り、そこから文字とトークンを抽出します。このパッケージのクラス(

JSONObject



JSONArray

など)によってJSON __Stringsを解析するために内部的に使用されます。

他のより単純なメソッド(

string.toCharArray()

など)を使用して同じ機能を実現できるため、このクラスを直接使用する状況はあまり多くありません。

JSONTokener jt = new JSONTokener("lorem");

while(jt.more()) {
    Log.info(jt.next());
}

これで、

more()

メソッドを使用して残りの要素があるかどうかをチェックし、

next()

を使用して次の要素にアクセスすることで、反復子のように

JSONTokener

にアクセスできます。

前の例から受け取ったトークンは次のようになります。

l
o
r
e
m


7.

CDL


カンマ区切りのテキストを

JSONArray

に、またはその逆に変換するためのhttp://stleary.github.io/JSON-java/org/json/CDL.html[CDL](

Comma Delimited List)

クラスが提供されています。


7.1. カンマ区切りテキスト

から直接

JSONArray

を生成する

カンマ区切りテキストから直接

JSONArray

を生成するために、

JSONTokener

を受け入れる静的メソッド

rowToJSONArray()

を使用できます。

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

私たちの

JSONArray

は現在以下で構成されています。

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


7.2. JSONArrayからのコンマ区切りテキストの作成

前のステップを逆にして

JSONArray

からコンマ区切りのテキストを取り戻すためには、次のようにします。

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


String


cdt

の内容は以下のとおりです。

England,USA,Canada


7.3. カンマ区切りテキストを使用した

JSONObject


sの

JSONArray__の生成


JSONObject

sの

JSONArray

を生成するには、ヘッダーとデータの両方を含むテキスト

String

をカンマで区切って使用します。

異なる行は、キャリッジリターン

(\ r)

またはラインフィード__(\ n)を使用して区切られます。

最初の行はヘッダーのリストとして解釈され、それ以降の行はすべてデータとして扱われます。

String string = "name, city, age \n" +
  "john, chicago, 22 \n" +
  "gary, florida, 35 \n" +
  "sal, vegas, 18";

JSONArray result = CDL.toJSONArray(string);

オブジェクト

JSONArray result

は、(明確にするためにフォーマットされた出力)で構成されています。

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

この例では、データとヘッダーの両方が同じ

String内で提供されていることに注意してください。** ヘッダーとコンマ区切りの取得に使用される

JSONArray

を提供することによって同じ機能を実現できる代替方法

String__はデータとして機能します。

異なる行は、キャリッジリターン

(\ r)

またはラインフィード__(\ 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);

ここで、オブジェクト

result

の内容を以前とまったく同じように取得します。


8クッキー



Cookie


クラスは、WebブラウザのCookieを処理し、ブラウザのCookieを

JSONObject

に、またはその逆に変換するメソッドを持ちます。

これが

Cookie

クラスの主なメソッドです。


  1. toJsonObject(String sourceCookie)–

    Cookie文字列をに変換します.


JSONObject



toString(JSONObject jo)

– これは前のメソッドの逆です。


JSONObject

をCookie

String

に変換します。

Cookie

String



JSONObject

に変換するには、静的メソッド

Cookie.toJSONObject()

を使用してください。

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


8.2.

JSONObject

をCookie

String


に変換する

それでは、

JSONObject

をcookie __Stringに変換します。

String cookie = Cookie.toString(cookieJO);


9

HTTP




HTTP


クラスには、HTTPヘッダーを

JSONObject

に、またはその逆に変換するための静的メソッドが含まれています。

このクラスには2つの主なメソッドもあります。


  1. toJsonObject(String sourceHttpHeader) –

    HttpHeaderを変換します

文字列

から

JSONObject



toString(JSONObject jo)

– 指定された

JSONObject__をに変換します


String


9.1.

JSONObject

からHTTPヘッダーへの変換


HTTP.toString()

メソッドは、

JSONObject

をHTTPヘッダー

String:

に変換するために使用されます。

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

ここで、私たちの

String httpStr

は以下で構成されます。

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

HTTPリクエストヘッダを変換する際、

JSONObject

には

“ Method”、


“ Request-URI”

、および

“ HTTP-Version”

キーが含まれている必要があります。 Version」、


「Status-Code」

、および

「Reason-Phrase」__パラメータ。


9.2. HTTPヘッダ

String



JSONObject


に変換する

ここで、前の手順で取得したHTTP文字列を、その手順で作成したまさに

JSONObject

に変換します。

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


10

JSONException




JSONException


は、エラーが発生したときにこのパッケージによってスローされる標準の例外です。

これはこのパッケージの全てのクラスで使われています。通常、例外の後には、何が正確に失敗したのかを示すメッセージが続きます。


11結論

このチュートリアルでは、Javaを使用したJSON(

org.json

)を見て、ここで利用できるコア機能のいくつかに焦点を当てました。

この記事で使用されている完全なコード・スニペットは、https://github.com/eugenp/tutorials/tree/master/json[GitHubについて]で見つけることができます。