Androidプロジェクト----JSON解析(4種類の解析技術詳細)について
json概要1.コンセプト:jsonフルネームはjavaScript object Notationで、軽量レベルのデータ交換フォーマットです.
2.特徴:
1.本質は特定のフォーマットを持つ文字列
2.jsonはプログラミング言語から完全に独立している
3.jsonはxmlデータ伝送よりずっと有効性が高い
AndroidシステムもJSON解析のAPIをオリジナルで提供しているが、その速度は遅く、開発者の効率を高め、エラーを低減するための簡単なインタフェースを提供していない.したがって、通常、システムのAPIの代わりに、他の優れたJSON解析実装を選択します.現在、JSON解析のオープンソース実装には主に以下の3つが含まれています.
GsonJackJsonFastJsonJSONオブジェクト:
JSON配列:
まず簡単に原生のJSON解析APIを紹介します:彼の特徴はとても面倒で、複雑なjsonデータの解析に対してとても間違いやすいです
次の操作を行います.
解析JSONオブジェクトのAPI:JsonObjectJSONObject(String json);Json文字列をJsonオブジェクトに解析します.
getXxx(String name) ;jsonオブジェクトにおけるnameに基づいて対応するvalue値を得る.
解析Json配列のAPI:JSOnArrayJSOnArray(String json);json文字列をjson配列に解析する.
int length();json配列中の要素の個数を得る.
getXxx(String name) ;json配列に対応する要素データをnameに基づいて得た.
GSONGsonはGoogle出品のJson解析関数ライブラリで、JSON文字列を対応するJavaオブジェクトに逆シーケンス化したり、逆にJavaオブジェクトを対応する文字列にシーケンス化したりすることができ、開発者が手動でJSONObjectとJSOnArrayを通じてJsonフィールドを1つずつ解析する悩みを免れ、エラーの可能性を低減し、コードの品質を強化した.gson解析では,対応するJavaエンティティクラスに注釈を用いてタグを付ける必要はなく,任意の複雑なJavaオブジェクトにソースコードのないオブジェクトを含むことをサポートする.
jsonに対応するクラスを定義するには
メンバー変数名を定義してからメンバー変数のタイプを定義してから汎用クラスを定義して外向クラスから徐々に推奨
GSONの特徴は、解析がそんなに面倒ではなく、コード量が簡潔で、複雑なJsonデータを簡単に解析でき、グーグル公式にも推奨されていることです.
JArパッケージのダウンロードアドレス:https://mvnrepository.com/artifact/com.google.code.gson/gson
またAndroid Studio用の開発では、Gradleを通じて依存を直接追加でき、jarパッケージをダウンロードする必要がなく、特に便利です.以下の通りです.
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.0'1.GSONオブジェクトGson gson=new Gson()を作成します.2.JavaBeanクラスの作成
3.fromJson()メソッドを呼び出して、jsonデータオブジェクトのJavaオブジェクトを返します.(JSON対象)
User user = gson.fromJson(string, User.class);4.fromJson()メソッドを呼び出し、そのjsonデータオブジェクトのJavaセットを返す.(json配列)
5.Webからデータをダウンロードする:
Fastjsonfastjsonはアリババ社が出品したjava言語で作成された高性能で機能が完備したJSON関数ライブラリで、「秩序を仮定して迅速にマッチングする」アルゴリズムを採用し、JSON parseの性能を極致に向上させ、現在java言語の中で最も速いJSONライブラリと呼ばれている.Fastjsonインタフェースは簡単で使いやすく,キャッシュシーケンス化,プロトコルインタラクションに広く用いられている.Web出力、Androidクライアントなど多様なアプリケーションシーンFastjsonの特徴は、Java言語で作成された高性能機能が充実したJSONライブラリです.「仮定秩序、高速マッチング」アルゴリズムを採用しています
Fastjsonを使用するには、Gsonと同じようにjarパッケージをインポートするか、Gradleに依存を追加します.
implementation 'com.alibaba:fastjson:1.1.55.android'jarパッケージダウンロードアドレス:https://github.com/alibaba/fastjson/wiki(他の人のを参考にしてへへへ)
1.彼もJavaBeanクラスを使います.Gsonと同じように、ここにはコードが貼られません.
2.parseObject()メソッドを呼び出し、変換されたJavaオブジェクトを取得します.
User user = JSON.parseObject(string, User.class);3.parseArray()メソッドを呼び出し、変換されたJavaセットを取得します.
4.webエンドクエリはGsonコードと似ているので、詳しくは説明しない
Jacksonacksonはjava言語の流行のJSON関数ライブラリで、android開発の使用過程で、主に3つの部分を含んでいます.Jacksonは簡単にJavaオブジェクトをjsonオブジェクトとxmlドキュメントに変換することができ、同じようにjson、xmlをJavaオブジェクトに変換することもできます.彼はイベント駆動に基づいて、GSONと同じように、まずJSONデータに対応するJavaBeanクラスを作成すると、簡単な操作で必要なJSONデータを解析することができます.しかし、Gson解析とは異なり、GSONはオンデマンド解析が可能である.すなわち、作成されたJavaBeanクラスは必ずしも解析するJSONデータを完全にカバーしているとは限らず、オンデマンドで属性を作成するが、Jackson解析に対応するJavaBeanはJsonデータの中のすべてのkeyを対応させなければならない.すなわち、JSON内のデータをすべて解析しなければならず、オンデマンド解析ができない.ジャックソンの解析速度も効率もGSONより高い
Jacksonを使用するには、Gsonと同じようにjarパッケージをインポートするか、Gradleに依存を追加します.
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.0.pr3'implementation 'com.fasterxml.jackson.core:jackson-core:2.9.0.pr3'implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.0.pr 3'jarパッケージのダウンロードアドレス:http://wiki.fasterxml.com/JacksonDownload
1.ObjectMapperクラスの作成
ObjectMapper:このクラスはJavaオブジェクトとJson間の変換を提供し、主にJsonParserとJsonGeneratorインスタンスによって実際のJsonデータの読み書き操作を完了します.このクラスはObjectCodecのサブクラスであり,主な実装の詳細はObjectCodecにある.また、このクラスは繰り返し使用できるため、一般的にこのクラスの単一のモードが作成されます.
2.彼もJavaBeanクラスを使います.Gsonと同じように、ここにはコードが貼られません.
3.readvalue()メソッドを呼び出し、変換されたJavaオブジェクトを取得します.
4.JSON配列
2.特徴:
1.本質は特定のフォーマットを持つ文字列
2.jsonはプログラミング言語から完全に独立している
3.jsonはxmlデータ伝送よりずっと有効性が高い
AndroidシステムもJSON解析のAPIをオリジナルで提供しているが、その速度は遅く、開発者の効率を高め、エラーを低減するための簡単なインタフェースを提供していない.したがって、通常、システムのAPIの代わりに、他の優れたJSON解析実装を選択します.現在、JSON解析のオープンソース実装には主に以下の3つが含まれています.
GsonJackJsonFastJsonJSONオブジェクト:
JSON配列:
まず簡単に原生のJSON解析APIを紹介します:彼の特徴はとても面倒で、複雑なjsonデータの解析に対してとても間違いやすいです
次の操作を行います.
解析JSONオブジェクトのAPI:JsonObjectJSONObject(String json);Json文字列をJsonオブジェクトに解析します.
getXxx(String name) ;jsonオブジェクトにおけるnameに基づいて対応するvalue値を得る.
private String ObjectanalysisTest(String string) {
try {
JSONObject jsonObject = new JSONObject(string);
String name = jsonObject.getString("name");
int age = jsonObject.optInt("age");
String sex = jsonObject.optString("sex");
return "name:" + name + " age:" + age + " sex:" + sex;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
解析Json配列のAPI:JSOnArrayJSOnArray(String json);json文字列をjson配列に解析する.
int length();json配列中の要素の個数を得る.
getXxx(String name) ;json配列に対応する要素データをnameに基づいて得た.
private String ArrayanalysisTest(String string) {
try {
JSONArray array = new JSONArray(string);
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
String name = object.getString("name");
int age = object.optInt("age");
String sex = object.optString("sex");
Log.e("1", "name:" + name + " age:" + age + " sex:" + sex);
buffer.append("name:" + name + " age:" + age + " sex:" + sex + "
");
}
return buffer.toString();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
GSONGsonはGoogle出品のJson解析関数ライブラリで、JSON文字列を対応するJavaオブジェクトに逆シーケンス化したり、逆にJavaオブジェクトを対応する文字列にシーケンス化したりすることができ、開発者が手動でJSONObjectとJSOnArrayを通じてJsonフィールドを1つずつ解析する悩みを免れ、エラーの可能性を低減し、コードの品質を強化した.gson解析では,対応するJavaエンティティクラスに注釈を用いてタグを付ける必要はなく,任意の複雑なJavaオブジェクトにソースコードのないオブジェクトを含むことをサポートする.
jsonに対応するクラスを定義するには
メンバー変数名を定義してからメンバー変数のタイプを定義してから汎用クラスを定義して外向クラスから徐々に推奨
GSONの特徴は、解析がそんなに面倒ではなく、コード量が簡潔で、複雑なJsonデータを簡単に解析でき、グーグル公式にも推奨されていることです.
JArパッケージのダウンロードアドレス:https://mvnrepository.com/artifact/com.google.code.gson/gson
またAndroid Studio用の開発では、Gradleを通じて依存を直接追加でき、jarパッケージをダウンロードする必要がなく、特に便利です.以下の通りです.
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.0'1.GSONオブジェクトGson gson=new Gson()を作成します.2.JavaBeanクラスの作成
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
private int age;
private String name;
private String sex;
private String address;
public String getLike() {
return like;
}
public void setLike(String like) {
this.like = like;
}
private String like;
public String Usershow(){
Log.e("User", " :" + name + " :" + age + " :" + sex + " :" + address + " :" + like);
return " :" + name + " :" + age + " :" + sex + " :" + address + " :" + like;
}
3.fromJson()メソッドを呼び出して、jsonデータオブジェクトのJavaオブジェクトを返します.(JSON対象)
User user = gson.fromJson(string, User.class);4.fromJson()メソッドを呼び出し、そのjsonデータオブジェクトのJavaセットを返す.(json配列)
List list = gson.fromJson(string, new TypeToken>() {
}.getType());
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
buffer.append(user.Usershow() + "
");
}
5.Webからデータをダウンロードする:
URL url = new URL(urlstr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream stream = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream,
"UTf-8"));
String sread = null;
StringBuffer buffer = new StringBuffer();
while ((sread = bufferedReader.readLine()) != null) {
buffer.append(sread);
buffer.append("\r
");
}
String string = buffer.toString();
if (string != null && string.startsWith("\ufeff")) {
string = string.substring(1);
}
Gson gson = new Gson();
User user = gson.fromJson(string,User.class);
return user.Usershow();
Fastjsonfastjsonはアリババ社が出品したjava言語で作成された高性能で機能が完備したJSON関数ライブラリで、「秩序を仮定して迅速にマッチングする」アルゴリズムを採用し、JSON parseの性能を極致に向上させ、現在java言語の中で最も速いJSONライブラリと呼ばれている.Fastjsonインタフェースは簡単で使いやすく,キャッシュシーケンス化,プロトコルインタラクションに広く用いられている.Web出力、Androidクライアントなど多様なアプリケーションシーンFastjsonの特徴は、Java言語で作成された高性能機能が充実したJSONライブラリです.「仮定秩序、高速マッチング」アルゴリズムを採用しています
Fastjsonを使用するには、Gsonと同じようにjarパッケージをインポートするか、Gradleに依存を追加します.
implementation 'com.alibaba:fastjson:1.1.55.android'jarパッケージダウンロードアドレス:https://github.com/alibaba/fastjson/wiki(他の人のを参考にしてへへへ)
1.彼もJavaBeanクラスを使います.Gsonと同じように、ここにはコードが貼られません.
2.parseObject()メソッドを呼び出し、変換されたJavaオブジェクトを取得します.
User user = JSON.parseObject(string, User.class);3.parseArray()メソッドを呼び出し、変換されたJavaセットを取得します.
List users = JSON.parseArray(string,User.class);
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
buffer.append(user.Usershow() + "
");
}
return buffer.toString();
4.webエンドクエリはGsonコードと似ているので、詳しくは説明しない
Jacksonacksonはjava言語の流行のJSON関数ライブラリで、android開発の使用過程で、主に3つの部分を含んでいます.Jacksonは簡単にJavaオブジェクトをjsonオブジェクトとxmlドキュメントに変換することができ、同じようにjson、xmlをJavaオブジェクトに変換することもできます.彼はイベント駆動に基づいて、GSONと同じように、まずJSONデータに対応するJavaBeanクラスを作成すると、簡単な操作で必要なJSONデータを解析することができます.しかし、Gson解析とは異なり、GSONはオンデマンド解析が可能である.すなわち、作成されたJavaBeanクラスは必ずしも解析するJSONデータを完全にカバーしているとは限らず、オンデマンドで属性を作成するが、Jackson解析に対応するJavaBeanはJsonデータの中のすべてのkeyを対応させなければならない.すなわち、JSON内のデータをすべて解析しなければならず、オンデマンド解析ができない.ジャックソンの解析速度も効率もGSONより高い
Jacksonを使用するには、Gsonと同じようにjarパッケージをインポートするか、Gradleに依存を追加します.
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.0.pr3'implementation 'com.fasterxml.jackson.core:jackson-core:2.9.0.pr3'implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.0.pr 3'jarパッケージのダウンロードアドレス:http://wiki.fasterxml.com/JacksonDownload
1.ObjectMapperクラスの作成
ObjectMapper:このクラスはJavaオブジェクトとJson間の変換を提供し、主にJsonParserとJsonGeneratorインスタンスによって実際のJsonデータの読み書き操作を完了します.このクラスはObjectCodecのサブクラスであり,主な実装の詳細はObjectCodecにある.また、このクラスは繰り返し使用できるため、一般的にこのクラスの単一のモードが作成されます.
ObjectMapper mapper = new ObjectMapper();
2.彼もJavaBeanクラスを使います.Gsonと同じように、ここにはコードが貼られません.
3.readvalue()メソッドを呼び出し、変換されたJavaオブジェクトを取得します.
User user = null;
try {
user = mapper.readValue(string,User.class);
} catch (IOException e) {
e.printStackTrace();
}
return user.Usershow();
4.JSON配列
ObjectMapper mapper = new ObjectMapper();
ArrayList users = null;
try {
JavaType javaType = mapper.getTypeFactory().constructParametricType(ArrayList.class,User.class);
users = mapper.readValue(string,javaType);
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
buffer.append(user.Usershow() + "
");
}
return buffer.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;