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 形式の仕様 :
http://www.php.cn/jsontoolプロトコルと同じように、一連の仕様が必要です。結局のところ、両者は Json 文字列を介してデータを転送します。構文規則は次のとおりです。 データは名前内にあります。 /値のペア カンマで区切られたデータ ; 中括弧はオブジェクトを保存します 角括弧は配列を保存します ; Json データの書き込み形式: 名前と値のペア 例: "person": "coder-pig" たとえば、単純な Json 文字列:
Json の解析に加えて、結合することもできますもちろん、Json 文字列を自分で入力し、それが正しいかどうかわからない場合は、 Baidu には次のような検証ツールがあります:[ { "id":"1","name":"基神","age":"18" }, { "id":"2","name":"B神","age":"18" }, { "id":"3","name":"曹神","age":"18" } ]
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();} }
レンダリングを実行します :
へへ、それはとても簡単ですよね? 次は、より複雑なものを探してみましょう。
2) 複雑な Json 文字列の解析例:
次のような Json 文字列の場合はどうなるでしょうか?
はは、それでは、段階的にデータを差し引く必要があります:
解析コードは次のとおりです:
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(); } }
印刷されたログを見てください:
もちろん、別のログもありますレイヤー、興味があるなら自分でやってみてください...
このセクションの概要:
Android が提供する Json 解析クラスを使用すると、もちろん、ゆっくりと解析することもできます。プロセス 一方、JSON は自分で結合することもできます。時間の都合上、ここではゆっくりと結合していきます (笑)。 サードパーティの Json 解析ライブラリをいくつか学習すると、はるかに簡単になります。~はい、このセクションはこれで終わりです。ありがとうございます~