Android JSONデータの解析


このセクションの概要:

サーバーと対話するときに使用する最も一般的なデータ転送方法は、JSON 文字列の形式であることは誰もがよく知っていると思います。 オブジェクトを保存するには、それを Json 文字列として記述して保存することもできます。 Json の解析 Gson、Fastjson、Jackson のどれを使用しているかわかりません ちょっと待ってください。ただし、このセクションでは、これらのサードパーティ解析ライブラリを使用せず、Android 独自の Json パーサーを使用して Json を解析します。 さて、このセクションを始めましょう!


1.Jsonの概念とXMLとの比較

1) Jsonとは何ですか?

答え: JavaScript Object Natation、XML のような軽量のデータ交換フォーマット、 クライアントとサーバーの対話に広く採用されているソリューションです。可読性が良く、さっと書きやすいのが特徴です。

2) Json と XML の比較:

  • JSON と XML のデータの可読性は基本的に同じです
  • JSON と XML も豊富な解析メソッドを備えています
  • XML と比較して、JSON はデータ量が少ないですサイズ
  • JSON と JavaScript 間の対話はより便利です
  • JSON は XML よりもデータの記述が少ないです
  • JSON は XML よりもはるかに高速です

PS: 上記は Baidu からのものです~ Json の利点について簡単に説明しましょう:サイズが小さく、トラフィックを節約しますが、XML ほど直観的で読みやすいわけではありません もう少し悪いです!

3) Json 形式の仕様 :

プロトコルと同じように、一連の仕様が必要です。結局のところ、両者は Json 文字列を介してデータを転送します。構文規則は次のとおりです。 データは名前内にあります。 /値のペア カンマで区切られたデータ ; 中括弧はオブジェクトを保存します 角括弧は配列を保存します ; Json データの書き込み形式: 名前と値のペア 例: "person": "coder-pig" たとえば、単純な Json 文字列:

[
    { "id":"1","name":"基神","age":"18" },
    { "id":"2","name":"B神","age":"18"  },
    { "id":"3","name":"曹神","age":"18" }
]

Json の解析に加えて、結合することもできますもちろん、Json 文字列を自分で入力し、それが正しいかどうかわからない場合は、 Baidu には次のような検証ツールがあります:
http://www.php.cn/jsontool
Json 文字列を貼り付けて検証してください。

2. Android が提供する Json 解析クラス

これらの API はすべて org.json パッケージの下に存在し、使用するクラスは次のとおりです:

  • JSONオブジェクト: Json 文字列と Java オブジェクト間の変換を完了できる Json オブジェクト
  • JSONArray: Json 配列は、Json 文字列と Java コレクションまたはオブジェクト間の変換を完了できます
  • JSONStringer: Json テキスト構築クラス。このクラスは、JSON テキストを迅速かつ便利に作成するのに役立ちます。 各 JSONStringer エンティティは、1 つの JSON テキストのみを作成できます
  • JSONTokener: Json 解析クラス
  • JSONException: Json 例外

3 コード例: Json 文字列の解析:

PS: ここでは、次のように記述します。別のサーブレットや Web サイトをリクエストする場合は、解析用の文字列に Json を書き込んでシミュレートするだけです。

1) 単純な Json 文字列解析の例:

解析しているのは上記の単純な Json です。まず、POJO クラスを作成しましょう:

person.java:

/**
 * Created by Jay on 2015/9/8 0008.
 */
public class Person {
    private String id;
    private String name;
    private String age;
    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return this.id;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(String age){
        this.age = age;
    }
    public String getAge(){
        return this.age;
    }
    @Override
    public String toString() {
        return this.name + "~年方:" + this.age;
    }
}

上記の Json 文字列を解析するパーサーを作成します。メソッド:

private void parseEasyJson(String json){
    persons = new ArrayList();
    try{
        JSONArray jsonArray = new JSONArray(json);
        for(int i = 0;i < jsonArray.length();i++){
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            Person person = new Person();
            person.setId(i+"");
            person.setName(jsonObject.getString("name"));
            person.setAge(jsonObject.getString("age"));
            persons.add(person);
        }
    }catch (Exception e){e.printStackTrace();}
}

レンダリングを実行します :

1.png

へへ、それはとても簡単ですよね? 次は、より複雑なものを探してみましょう。


2) 複雑な Json 文字列の解析例:

次のような Json 文字列の場合はどうなるでしょうか?

2.png

はは、それでは、段階的にデータを差し引く必要があります:

解析コードは次のとおりです:

private void parseDiffJson(String json) {
    try {
        JSONObject jsonObject1 = new JSONObject(json);
        Log.e("Json", json);
        JSONArray jsonArray = jsonObject1.getJSONArray("ch");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            //取出name
            String sname = jsonObject.getString("names");
            JSONArray jarray1 = jsonObject.getJSONArray("data");
            JSONArray jarray2 = jsonObject.getJSONArray("times");
            Log.e("Json", sname);
            Log.e("Json", jarray1.toString());
            Log.e("Json", jarray2.toString());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

印刷されたログを見てください:

3.png

もちろん、別のログもありますレイヤー、興味があるなら自分でやってみてください...


このセクションの概要:

Android が提供する Json 解析クラスを使用すると、もちろん、ゆっくりと解析することもできます。プロセス 一方、JSON は自分で結合することもできます。時間の都合上、ここではゆっくりと結合していきます (笑)。 サードパーティの Json 解析ライブラリをいくつか学習すると、はるかに簡単になります。~はい、このセクションはこれで終わりです。ありがとうございます~