Android解析JSONデータのいくつかの方式の比較
4260 ワード
Json紹介
Json(JavaScript Object Natotion)は軽量レベルのデータ交換フォーマットであり、読み取りや書き込みが容易な特性を有し、主にデータの転送に用いられる.JsonはXmlに取って代わるデータ構造であり、xmlよりもコンパクトであり、データ伝送トラフィックと占有帯域幅を低減する.
Json構文
{}表示対象
[]は配列を表す
「」は値または属性を表します.
:前がkey、後ろがvalueであることを示し、valueは文字列、数値、または別の配列またはオブジェクトであってもよい
例{「name」:「tom」}は、属性名がnameであり、値がtomであることを示す.[{"name":"tom"},{"name":"jack"}]この2つのオブジェクトを表す配列は,{"name":["tom","jack"}これはname配列を持つオブジェクトに等しい.
従来の方法(org.jsonパッケージを使用)
次に、json文字列を生成し、json文字列を解析する方法を示す.
org.Jsonパッケージには、JSOnArray、JSOnObject、JSOnStringer、JSOnTokener、JSOnONExceptionの5つのクラスが用意されています.
JSONException異常類
JSONSStringer秩序構造
JSONObject無秩序構造
JSOnArray配列オブジェクト
JSOnStringerによって入力されるキー値のペアは規則的であり、JSOnObjectによって入力されるキー値のペアは無秩序であり、一般的にJSOnObjectを使用すればよいが、いくつかのネストされたJsonおよびいくつかのJSOnArrayにkeyがなくvalueのみの場合、JSOnStringerを使用する.
クラスライブラリGsonの使用
Gsonのようなjsonライブラリでよく使われるのはGsonのほかにJacksonとFastJsonで、この3つの個性エネルギーの対比についてネット上では諸説あるが、もちろん彼らが実現したコードと大きな関係があるが、個人的なテストの後、JacksonとFastJsonのシーケンス化と逆シーケンス化の性能が相当することが分かった.Gson性能は比較的弱いが安定している.
Json(JavaScript Object Natotion)は軽量レベルのデータ交換フォーマットであり、読み取りや書き込みが容易な特性を有し、主にデータの転送に用いられる.JsonはXmlに取って代わるデータ構造であり、xmlよりもコンパクトであり、データ伝送トラフィックと占有帯域幅を低減する.
Json構文
{}表示対象
[]は配列を表す
「」は値または属性を表します.
:前がkey、後ろがvalueであることを示し、valueは文字列、数値、または別の配列またはオブジェクトであってもよい
例{「name」:「tom」}は、属性名がnameであり、値がtomであることを示す.[{"name":"tom"},{"name":"jack"}]この2つのオブジェクトを表す配列は,{"name":["tom","jack"}これはname配列を持つオブジェクトに等しい.
従来の方法(org.jsonパッケージを使用)
次に、json文字列を生成し、json文字列を解析する方法を示す.
/**
* json
* @param user
* @return
*/
public static String buildJson(User user) {
try {
JSONObject juser = new JSONObject();
juser.put("name", user.getName());
juser.put("pwd",user.getPwd());
return juser.toString();
}catch (JSONException e) {
Log.e("JSON_ERROR",e.getMessage());
}
return null;
}
/**
* json
* @param json
* @return
*/
public static User getUser(String json) {
JSONTokener jsonTokener = new JSONTokener(json);
try {
JSONObject user = (JSONObject) jsonTokener.nextValue();
if (user != null) {
String name = user.getString("name");
String pwd = user.getString("pwd");
return new User(name,pwd);
}
}catch (JSONException e){
Log.e("JSON_ERROR",e.getMessage());
}
return null;
}
/**
* json User
* @param key
* @param json
* @return
*/
public static List getUsers(String key,String json) {
List list = new ArrayList();
try {
JSONObject jsonObject = new JSONObject(json);
if (jsonObject != null) {
JSONArray array = jsonObject.getJSONArray(key);
if (array != null && array.length() > 0 ) {
for (int i = 0; i < array.length(); i ++) {
JSONObject userJson = array.getJSONObject(i);
User user = new User();
user.setName(userJson.getString("name"));
user.setPwd(userJson.getString("pwd"));
list.add(user);
}
}
return list;
}
}catch (JSONException e) {
Log.e("JSON_ERROR",e.getMessage());
}
return null;
}
org.Jsonパッケージには、JSOnArray、JSOnObject、JSOnStringer、JSOnTokener、JSOnONExceptionの5つのクラスが用意されています.
JSONException異常類
JSONSStringer秩序構造
JSONObject無秩序構造
JSOnArray配列オブジェクト
JSOnStringerによって入力されるキー値のペアは規則的であり、JSOnObjectによって入力されるキー値のペアは無秩序であり、一般的にJSOnObjectを使用すればよいが、いくつかのネストされたJsonおよびいくつかのJSOnArrayにkeyがなくvalueのみの場合、JSOnStringerを使用する.
クラスライブラリGsonの使用
/**
* Gson String
* @param user
* @return
*/
public static String getJson(User user) {
Gson gson = new Gson();
return gson.toJson(user);
}
/**
* Gson String
* @param json
* @return
*/
public static User getUser(String json) {
Gson gson = new Gson();
try {
return gson.fromJson(json,User.class);
}catch (Exception e) {
Log.e("TAG",e.getMessage());
}
return null;
}
/**
* Gson String
* @param json
* @return
*/
public static List getUsers(String json) {
Gson gson = new Gson();
try {
return gson.fromJson(json, new TypeToken>(){}.getType());
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
Gsonのようなjsonライブラリでよく使われるのはGsonのほかにJacksonとFastJsonで、この3つの個性エネルギーの対比についてネット上では諸説あるが、もちろん彼らが実現したコードと大きな関係があるが、個人的なテストの後、JacksonとFastJsonのシーケンス化と逆シーケンス化の性能が相当することが分かった.Gson性能は比較的弱いが安定している.