解析Json——操作JsonObject

3769 ワード

Jsonオブジェクトは、Name Valueペア(サブエレメント)の無秩序な集合であり、Mapオブジェクトに相当します.JsonObjectクラスはbantouyan-jsonライブラリのJsonオブジェクトに対する抽象であり,Jsonオブジェクトを操作する様々な方法を提供する.JsonObjectクラスを操作する方法について説明します.
 
一、JsonObjectインスタンスの作成
JsonObjectインスタンスを作成するには、スーパークラスJsonの静的メソッドparseJsonText、parseJsonReader、parseJavaMapを使用してJsonObjectインスタンスを取得する方法と、JsonObjectクラスの構造メソッドを直接利用してJsonObjectインスタンスを作成する方法の2つがあります.
入力されたパラメータに応じて、parseJsonTextはJsonObjectインスタンスまたはJsonArrayインスタンスを返します.parseJsonTextメソッドを使用するサンプルコードは次のとおりです.
Javaコード
String jsonText = "{'name1': 'value1', 'name2': 'value2'}";
JsonObject jobj = (JsonObject)Json.parseJsonText(jsonText);

parseJsonTextはJsonクラス変数を返すので、強制タイプ変換を使用します.
parseJsonReaderは、ReaderタイプパラメータからJsonテキストストリームを読み取り、Jsonインスタンスに変換します.parseJsonTextと同様に、戻り値には強制的なタイプ変換が必要です.
メソッドparseJavaMapは、タイプ変換なしでJsonObject変数を直接返します.サンプルコードは次のとおりです.
Javaコード
HashMap<Object, Object> map = new HashMap<Object, Object>();
map.put("nameA", "valueA"); 
map.put("nameB", "valueB"); 
JsonObject jobj = Json.parseJavaMap(map);

 
Map内に複雑なオブジェクトを解析する必要がある場合は、parseJavaMapのリロードバージョンparseJavaMap(Map,JsonParser)を使用して処理できます(JsonParserの使用参照解析Json-Jsonクラスの静的メソッドの第5部).
JsonObjectクラスのコンストラクション関数には、JsonObject()、JsonObject(int)、JsonObject(Map)、JsonObject(Map)の4つのリロードバージョンがあります.パラメータなしと整数パラメータ付きのリロード・バージョンでは、メモリの再割り当てを不要にするために、JsonObjectの初期容量のサイズを指定できるのとは異なり、空のJsonObjectインスタンスが構築されます.リロードバージョンJsonObject(Map)とJsonObject(Map,JsonParser)は、Jsonクラスと同様の静的メソッドparseJavaMapを使用します.
 
二、JsonObjectにサブエレメントを追加する
JsonObjectインスタンスにサブエレメント呼び出しメソッドaddまたはaddAllを追加します.bantouyan-jsonライブラリでは、addもaddAllもnullのサブエレメントをNameに追加したり、既存のサブエレメントNameと同じサブエレメントを追加したりすることはできません.そうしないと、例外が放出されます.
メソッドaddには7種類のリロードバージョンがあり、メソッドaddAllには3種類のリロードバージョンがあり、それぞれ異なる場合に使用されます.
 
三、JsonObjectサブエレメントのValueを変更する
JsonObjectサブエレメントのValueを変更するには、メソッドsetとsetallを呼び出すことができます.どちらの方法も、Nameがnullのサブエレメントを無視します.同じサブエレメントが存在する場合は、このサブエレメントのValueを変更します.そうしないと、新しいサブエレメントが追加されます.
メソッドsetにも7種類のリロードバージョンがあり、addAllには3種類のリロードバージョンがあり、それぞれ異なる場合に適用されます.
 
四、JsonObjectサブエレメントの取得と検出
JsonObjectの各サブエレメントのValueはJsonインスタンスであり、このインスタンスはメソッドget(String)で取得できます.このインスタンスのタイプについては、メソッドgetType()取得を呼び出すほか、メソッドgetTypeのリロードバージョンgetType(String)をJsonObjectで取得することもできます(StringはサブエレメントのName).
メソッドgetString(String)を使用すると、指定したNameのサブエレメントValueの文字列値を取得できます.サブエレメントのValueがJsonPrimitiveインスタンスである場合、このインスタンス値に対応する文字列(引用符とエスケープ記号を持たない)が返されます.そうでない場合、対応する標準Jsonテキストが返されます.
サブエレメントのValueに対応するboolean、double、long、JsonArray、JsonObjectタイプの値を取得する場合は、メソッドgetBoolean(String)、getDouble(String)、getLong(String)、getJsonArray(String)、getJsonObject(String)をそれぞれ呼び出すことができます.getStringメソッドとは異なり、サブエレメントのValueが対応するタイプに変換できない場合に例外が放出されます.メソッドcanToBoolean(String)、canToDouble(String)、canToLong(String)、canToJsonArray(String)とcanToJsonObject(String)は、対応するタイプに変換できるかどうかを検出することができる.
特定のタイプでサブエレメントのValueを取得する場合、メソッドcanToXXXはtrueを返し、サブエレメントのValueがテストされたタイプであることを示さない.bantouyan-jsonライブラリの設計によれば、サブエレメントのValueのタイプがINTEGERであれば対応するdoubleタイプの値を得ることができ、タイプがStringであれば、一部Valueでは対応するboolean、long、doubleタイプの値を得ることができる. 
 
五、JsonObjectサブエレメントが存在するかどうかを確定する
サブエレメントを取得する前に、JsonObjectに指定したNameのサブエレメントが含まれているかどうかを判断できない場合があります.サブエレメントが存在するかどうかを判断するには、メソッドcontainsName(String)を呼び出します.
 
六、JsonObjectサブエレメントの削除
JsonObjectのサブエレメント呼び出しメソッドremove(String)を削除します.パラメータは削除するサブエレメントのNameです.
 
七、JsonObjectサブエレメント関連の集合を取得する
Mapと同様に,JsonObjectも無秩序なName Value対で構成されているため,JsonObjectはサブ要素関連の集合を取得するための3つの方法を実現している.
EntrySet()は、サブエレメントのName Valueペアで構成される集合を返します.
nameSet()は、サブエレメントのNameで構成される集合を返します.
values()は、サブエレメントのValueからなる集合を返します.