Java での JSON 配列の処理
JSON は、開発者や組織の間で広く使用されているデータ交換形式です。JSON という用語は JavaScriptObjectNotation の略です。
これは、人間が読める形式でのデータ交換を容易にするために特別に設計された、軽量で読みやすいテキストベースのフレームワークです。JSON はオープンスタンダードの形式であるため、特別な要件なしでどこでも使用できます。
さらに、JSON はほとんどのプログラミング言語でサポートされています。データ交換を必要とするプロジェクト開発者として働いたことがある場合は、JSON に出くわしたことがあるかもしれません。
たとえば、JSON オブジェクトを使用して、サーバーからモバイルアプリケーションにデータを転送したり、その逆を行ったりすることがよくあります。この記事では、JSON の構造、データ型、JSON オブジェクト、JSON 配列などの JSON の基本について説明します。
また、Java で JSON を操作する方法についても理解します。最後に、この記事では、Java で JSON を処理するためのサンプルコードを提供します。
Java での JSON 配列の処理
JSON は非常に柔軟で軽量な情報共有フレームワークであり、オブジェクトとデータ型を使用して情報を作成および共有します。
JSON では、データはキーと値のペアとして表されます。キーは具体的には文字列ですが、値は JSON でサポートされている任意のデータ型にすることができます。
JSON は次のデータ型をサポートします。
- 文字列
- 数値
- ブール値
- ヌル
これらの基本的な JSON データ型に加えて、JSON 配列と JSON オブジェクトをキーと値のペアの値として使用することもできます。
さらに、この記事では、配列とオブジェクトについて詳しく説明します。しかしその前に、JSON の機能を見てみましょう。
JSON の優れた機能のいくつかは次のとおりです。
- JSON は非常に単純です。JSON を理解して使用するために特別な努力をする必要はありません。
- JSON は簡単に理解でき、自己記述的です。JSON オブジェクトを見ると、それが何を伝えようとしているのかを簡単に理解できます。
- JSON は言語に依存しません。この機能は、JSON が広く受け入れられる主な要因であることが証明されています。ライブラリと単純なコードを使用して、ほぼすべての言語で JSON を操作できます。
- JSON は XML よりも高速です。それが広く使われているもう一つの理由です。
Java の JSON オブジェクトと JSON 配列
Java で JSON オブジェクトと配列を使用する方法を学ぶ前に、JSON オブジェクトと JSON 配列について理解する必要があります。
JSON オブジェクトは、データがキーと値のペアとして格納されるディクショナリデータ型と非常によく似ています。このキーと値のペアのキーは文字列である必要がありますが、値はオブジェクト、配列、またはその他のサポートされているデータ型にすることができます。
キーと値はコロン:
で区切り、各キーと値のペアはコンマ ,
で区切る必要があります。JSON オブジェクトは、中括弧 {}
を使用して表されます。
オブジェクトと配列を JSON オブジェクトにネストすることで、任意に複雑な JSON オブジェクトを作成できます。これは階層 JSON オブジェクトと呼ばれます。
これは、学生の詳細を表す JSON オブジェクトの例です。
{"name": "Roger", "Roll": 22, "Class": "XI"}
文字列の値は二重に変換されたコンマで引用していますが、数値は引用符で囲む必要がないことに注意してください。
辞書に似た JSON オブジェクトについて説明しました。一方、JSON 配列はリストに似ています。
リストでは、オブジェクトを角かっこ []
で囲みます。JSON 配列には、別の配列や JSON オブジェクトなど、サポートされている任意のデータ型を含めることができます。
これは JSON 配列の例です。
[1, "abc", {"name":"xyz"}]
上記の JSON 配列には、数値、文字列、およびオブジェクトが含まれていることに注意してください。これは、さまざまなデータ型を配列に格納できることを意味します。
Java の組み込みライブラリを使用して Java で JSON 配列を読み取る
Java は、多数のライブラリを備えた強力な言語です。幸い、Java で JSON オブジェクトと配列を読み取るためのライブラリが組み込まれています。
このようなライブラリは私たちの作業を容易にし、JSON オブジェクトと配列の解析と読み取りを簡単にします。この記事ではさらに、このようなライブラリをコードで使用して、Java で JSON オブジェクトと JSON 配列を読み取る方法を学習します。
コードに進む前に、JSON オブジェクトを作成し、ファイルに保存します。JSON ファイルの拡張子は .json
であることに注意してください。
したがって、コードをテストして実行する場合は、次の JSON コードをコピーして貼り付け、ファイルを .json
拡張子で任意の場所に保存します。JSON コードを以下に示します。
[{
"name":"MMN",
"roll": 24,
"marks": [91, 95, 97, 97, 94],
"parents": {
"name": "IMT",
"mobile":"1234567890"
},
"hobbies": ["sports", "reading", "music"],
"others": ["A", 1]
}]
この JSON ファイルには、単一の JSON オブジェクトを持つ JSON 配列が含まれていることに注意してください。この内部 JSON オブジェクトには、データ型が異なるいくつかのキーと値のペアが含まれています。
たとえば、name
は文字列、roll
は整数(JSON は整数を長整数として格納することに注意してください)、marks
は JSON 配列、parents
は別の JSON オブジェクトなどです。したがって、これは任意に複雑な JSON データの例です。
Java を使用してこのような JSON オブジェクトを読み取る方法を理解しましょう。
コードを記述する前に、JSON jar ファイルをダウンロードし、その JSON ファイルを指す classpath
変数を追加したことを確認する必要があります。これを行わないと、JSON はコンパイルされません。
JSON ファイルは、Java で他のファイルを開くのと同じ方法で開くことができます。基本的には、File()
コンストラクターを使用します。
コンストラクターがスローする必要な例外を処理するには、ファイルを開くステートメントを try-catch
ブロックで囲む必要があります。
ファイルが開かれると、そのオブジェクトは FileReader()
コンストラクターに渡されます。
Java オブジェクトを返す JSON パーサーを使用して、JSON コンテンツを解析します。JSON 配列をキャストするには、明示的なキャストを使用する必要があります。
JSON 配列には単一のオブジェクトが含まれていますが、場合によっては、JSON 配列に複数の JSON オブジェクトがある可能性があるため、ループを使用して解析された配列をトラバースする必要があります。解析された JSON 配列から各 JSON オブジェクトを抽出し、さらに処理します。
キーを使用して JSON オブジェクトの値を抽出する必要があるため、反復している JSON オブジェクトの構造を知っておく必要があることに注意してください。
さらに、名前付きキーを使用する関数にデータを渡すことで、JSON オブジェクトからデータを抽出します。JSON オブジェクトにはさまざまなデータ型が含まれているため、それぞれを適切に処理できます。
たとえば、整数、文字列、配列を表示しましたが、ネストされた JSON オブジェクト parents
を繰り返しました。次のコードは、説明されているロジックを実装しています。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class JSONReader {
public static void main(String[] args) {
JSONParser parser = new JSONParser();
FileReader fileReader;
try {
File file = new File("/home/stark/eclipse-workspace-java/Aditya/src/data.json");
fileReader = new FileReader(file);
// Parser returns an object, we need an explicit cast to covert it into a JSONArray
JSONArray array = (JSONArray) parser.parse(fileReader);
// Traverse the list
for (int i = 0; i < array.size(); i++) {
JSONObject obj = (JSONObject) array.get(i);
parseObject(obj);
}
}
catch (FileNotFoundException e) {
System.out.println(e.getStackTrace() + " :File Not Found");
} catch (ParseException e) {
System.out.println(e.getStackTrace() + " :Could not parse");
} catch (IOException e) {
System.out.println(e.getStackTrace() + " :IOException");
}
}
private static void parseObject(JSONObject obj) {
String name = (String) obj.get("name");
long roll = (long) obj.get("roll");
JSONArray marks = (JSONArray) obj.get("marks");
JSONArray hobbies = (JSONArray) obj.get("hobbies");
JSONObject parents = (JSONObject) obj.get("parents");
JSONArray others = (JSONArray) obj.get("others");
System.out.println("Name: " + name);
System.out.println("Roll: " + roll);
System.out.println("Marks: " + marks);
System.out.println("Hobbies: " + hobbies);
System.out.println(
"Parent's Name: " + parents.get("name") + ", Mobile: " + parents.get("mobile"));
System.out.println("Others: " + others);
}
}
File()
コンストラクターでファイルの正しいパスを指定する必要があります。上記のコードの出力は以下のとおりです。
Name: MMN
Roll: 24
Marks: [91,95,97,97,94]
Hobbies: ["sports","reading","music"]
Parent's Name: IMT, Mobile: 1234567890
Others: ["A",1]
まとめ
Java は人気のあるプログラミング言語であり、データ交換が必要な状況に遭遇することがよくあります。他のデータ交換形式も存在しますが、JSON は最も人気があり、簡単で、理解しやすい形式の 1つです。
JSON 形式、そのデータ型、および Java で解析された JSON ファイルについて学習しました。JSON は、任意の JSON データを交換できるようにする任意の複雑な構造を持つことができます。
一方、Java は、JSON を処理するためのシンプルでユニークでありながら強力なメソッドを提供します。