gson解析json

8792 ワード

json紹介


JSON(JavaScript Object Notation,JSオブジェクトタグ)は、軽量レベルのデータ交換フォーマットです.ECMAScript仕様のサブセットに基づいて、プログラミング言語とは完全に独立したテキストフォーマットを使用してデータを格納および表示します.簡潔で明確な階層はJSONを理想的なデータ交換言語にした.読み取りと作成が容易であり、同時に機械の解析と生成が容易であり、ネットワーク伝送効率を効果的に向上させる.現在、ほとんどのアプリはjsonを使用してフロントエンドにデータを返しています.

gsonパッケージ


GsonはGoogleが提供するJavaオブジェクトとJSONデータのマッピング用のJavaクラスライブラリです.JSON文字列をJavaオブジェクトに変換するか、逆にすることができます.

いくつかの一般的なjsonデータがjavaオブジェクトにどのように解析されるか


Android Sutdioで開発すれば、オンラインでライブラリを参照することができます.プロジェクト/app/build.gradleファイルのdependenciesの下にコードを追加します.
compile 'com.google.code.gson:gson:2.8.0'

gradleはデフォルトでJcenter Mavenウェアハウスからaarファイルを取得します.

解析オブジェクト


json文字列:{'name':'Ansen','age':20}」があり、2つの属性nameとageがあり、エンティティクラスUserを書いて対応することができます.TOStringメソッドを書き直しました.オブジェクトを出力すると、すべてのプロパティが出力されます.hash値ではありません.
public class User {
    private String name;//  
    private int age;//  

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

gsonパケットを使用してjson文字列をUserオブジェクトの1つのコードに変換すると、ここで使用するgsonオブジェクトはMainActivityのインスタンス変数です.fromJsonメソッドを呼び出すと変換できます.
String jsonStr="{'name':'Ansen', 'age':20}";
User user=gson.fromJson(jsonStr, User.class);
Log.i("MainActivity","parseObject user:"+user.toString());

配列に解析


上記ではjson文字列変換オブジェクトについて述べたが,企業開発ではサーバが配列形式のjsonデータを与えることもよくある.変換オブジェクトとほぼ同じです.
String jsonStr="[{'name':'Uini', 'age':30},{'name':'Lina', 'age':10}]";
List<User> users=gson.fromJson(jsonStr,new TypeToken<List<User>>() {}.getType());
for(int i=0;i<users.size();i++){
    Log.i("MainActivity","parseArrayList user:"+users.get(i));
}

Mapに解析

String jsonStr="{'1': {'name':'haha', 'age':11},'2': {'name':'nihao', 'age':22}}";
Map<String, User> users = gson.fromJson(jsonStr, new TypeToken<Map<String,User>>() {}.getType());
for(String key:users.keySet()){
    Log.i("MainActivity","parseArrayList key:"+key+" user:"+users.get(key));
}

オブジェクトをjson文字列に解析


json文字列をobjectに変換することを知っていますが、オブジェクトをjson文字列に変換したいなら?実は簡単で、gsonバッグは全部パッケージしてくれました.Userオブジェクトをnewし、gsonクラスのtoJsonメソッドを呼び出すとuserオブジェクトをjson文字列に変換できます.
User user=new User();
user.setAge(111);
user.setName("nime");
String jsonStr=gson.toJson(user);
Log.i("MainActivity","jsonStr:"+jsonStr);

以上のコードを実行し、印刷するロゴは以下の通りです.
05-12 17:18:48.991 14135-14135/com.ansen.gson I/MainActivity: parseObject user:User{name='Ansen', age=20}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList user:User{name='Uini', age=30}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList user:User{name='Lina', age=10}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList key:1 user:User{name='haha', age=11}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: parseArrayList key:2 user:User{name='nihao', age=22}
05-12 17:18:49.001 14135-14135/com.ansen.gson I/MainActivity: jsonStr:{"name":"nime","age":111}

ソースのダウンロード


ソースのダウンロード