Android JSON データ解析_PHP チュートリアル

WBOY
リリース: 2016-07-12 09:03:52
オリジナル
820 人が閲覧しました

Android JSON データ解析

ソフトウェアとハ​​ードウェア環境

  • Macbook Pro MGX 72
  • Android Studio 1.3.2
  • Genymotion エミュレータ

はじめに

現在、サーバーを処理しないアプリはほとんどありません。その中でも軽量な通信インタラクションにおいて、JSON (JavaScript Object Notation) と XML はクライアント/サーバー インタラクション ソリューションの天の剣と龍の剣と呼ばれています。 この記事では主に JSON 関連の知識を紹介します。

JSON オブジェクト

JSON 内のオブジェクトは 1 対の中括弧で囲まれており、オブジェクト内の各項目は「key:value」データ ペアであり、データ ペアはカンマで区切られています。 JSON オブジェクトのキーは String 型のみにすることができ、値は数値、ブール値、null などの他の型にすることもできます。以下に示すように

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">{    "Name" : "Alex",    "Sex"  : "Male",    "Age"  : "20",}</code>
ログイン後にコピー

JSON配列

JSON配列は角括弧のペアで囲まれており、同様にカンマで区切られたJSONオブジェクトです。例は次のとおりです

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">[    {    "Name" : "Alex",    "Sex"  : "Male",    "Age"  : "20",    },    {    "Name" : "May",    "Sex"  : "Female",    "Age"  : "19",    },    {    "Name" : "Mike",    "Sex"  : "Male",    "Age"  : "21",    }]</code>
ログイン後にコピー

FastJSONの基本的な使用方法は次のとおりです。 alibaba 企業独自のテストによると、JSON を解析するために特別に開発されたフレームワークは、非常に高速で効率的であり、ユニークです。例として、集約データ Web サイトからの蘇州市の天気予報の JSON データ クエリを考えてみましょう。取得された URL アドレスは http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F % です。 E5%B7%9E&key=6f9276e4d79c5d102bbfb28717beba93。データ ソースに問題がないことを確認するには、ブラウザで URL を開いてデータがあるかどうかを確認します。ここでは、Mac 用のもう 1 つのツール、JSON Accelerator を紹介します。これは、インターネットからクロールできるだけでなく、http リクエスト ヘッダー情報を追加することもでき、非常に便利です。

创建工程

新建工程取名为FastJSONDemo,由于要访问网络,所以需要在AndroidManifest.xml中添加相应权限

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;"><uses-permission android:name="android.permission.INTERNET"></uses-permission></code>
ログイン後にコピー

代码部分

网络请求部分,这里我们使用volley这个库,Google出品,使用简单。源码下载地址https://android.googlesource.com/platform/frameworks/volley/,jar包的下载地址http://download.csdn.net/detail/djstava/8793421。下载后把volley的库导入到工程中,UI的话,用了一个TextView来显示接收到的json数据

为了建立一个全局的请求队列,需要在实现一个继承自Application的子类,叫VolleyApplication

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">package com.djstava.fastjsondemo;import android.app.Application;import com.android.volley.RequestQueue;import com.android.volley.toolbox.Volley;/*** 包名称: com.djstava.fastjsondemo* 创建人: djstava* 创建时间: 15/9/23 下午3:44*/public class VolleyApplication extends Application{    public static RequestQueue requestQueue;    @Override    public void onCreate() {    super.onCreate();    requestQueue =  Volley.newRequestQueue(getApplicationContext());}public static RequestQueue getVolleyQueue() {    return requestQueue;    }}</code>
ログイン後にコピー

然后在MainActivity中的onStart方法编写请求部分,然后在onStop方法中取消请求

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">private static final String JSON_URL = "http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F%E5%B7%9E&key=6f9276e4d79c5d102bbfb28717beba93";//字段key是从聚合数据网站上申请过来的,请自行替换@Overrideprotected void onStart() {    super.onStart();    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, JSON_URL, null,            new Response.Listener<jsonobject>() {                @Override                public void onResponse(JSONObject jsonObject) {                    try {                        textView.setText(jsonObject.toString());                        Log.e(TAG,"result:" + jsonObject.getString("resultcode"));                    } catch (JSONException e) {                        e.printStackTrace();                    }                }            },            new Response.ErrorListener() {                @Override                public void onErrorResponse(VolleyError volleyError) {                    Log.e(TAG, volleyError.getMessage());                }            });    jsonObjectRequest.setTag("fastjson");    VolleyApplication.requestQueue.add(jsonObjectRequest);}@Overrideprotected void onStop() {    super.onStop();    VolleyApplication.requestQueue.cancelAll("fastjson");}</jsonobject></code>
ログイン後にコピー

别忘了在AndroiManifest.xml文件Application标签中加入

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">android:name=".VolleyApplication"</code>
ログイン後にコピー

使用Genymotion模拟器运行程序,可以看到获取的数据

Android JSON データ解析_PHP チュートリアル

为了方便读者查看,利用JSON Accelerator格式化一下

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">{"result" : {"sk" : {  "humidity" : "58%",  "wind_direction" : "西北风",  "temp" : "26",  "wind_strength" : "2级",  "time" : "17:27"},"today" : {  "temperature" : "22℃~27℃",  "dressing_index" : "舒适",  "dressing_advice" : "建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。",  "uv_index" : "弱",  "comfort_index" : "",  "wind" : "东北风3-4 级",  "weather" : "多云转阵雨",  "city" : "苏州",  "date_y" : "2015年09月24日",  "week" : "星期四",  "wash_index" : "不宜",  "weather_id" : {    "fa" : "01",    "fb" : "03"  },  "travel_index" : "较适宜",  "exercise_index" : "较适宜",  "drying_index" : ""},"future" : [  {    "temperature" : "22℃~27℃",    "weather_id" : {      "fa" : "01",      "fb" : "03"    },    "wind" : "东北风3-4 级",    "week" : "星期四",    "date" : "20150924",    "weather" : "多云转阵雨"  },  {    "temperature" : "21℃~26℃",    "weather_id" : {      "fa" : "03",      "fb" : "01"    },    "wind" : "东北风3-4 级",    "week" : "星期五",    "date" : "20150925",    "weather" : "阵雨转多云"  },  {    "temperature" : "21℃~27℃",    "weather_id" : {      "fa" : "01",      "fb" : "01"    },    "wind" : "东北风3-4 级",    "week" : "星期六",    "date" : "20150926",    "weather" : "多云"  },  {    "temperature" : "21℃~28℃",    "weather_id" : {      "fa" : "00",      "fb" : "00"    },    "wind" : "东北风3-4 级",    "week" : "星期日",    "date" : "20150927",    "weather" : "晴"  },  {    "temperature" : "22℃~28℃",    "weather_id" : {      "fa" : "01",      "fb" : "01"    },    "wind" : "东风3-4 级",    "week" : "星期一",    "date" : "20150928",    "weather" : "多云"  },  {    "temperature" : "22℃~28℃",    "weather_id" : {      "fa" : "01",      "fb" : "03"    },    "wind" : "东风3-4 级",    "week" : "星期二",    "date" : "20150929",    "weather" : "多云转阵雨"  },  {    "temperature" : "20℃~25℃",    "weather_id" : {      "fa" : "04",      "fb" : "04"    },    "wind" : "东南风4-5 级",    "week" : "星期三",    "date" : "20150930",    "weather" : "雷阵雨"    }    ]  },  "resultcode" : "200",  "reason" : "successed!",  "error_code" : 0}</code>
ログイン後にコピー

接下来该轮到fastjson登场了,,先到http://repo1.maven.org/maven2/com/alibaba/fastjson/下载对应版本的jar包,或者到https://github.com/alibaba/fastjson下载源码,再导入到工程中。

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, JSON_URL, null,            new Response.Listener<jsonobject>() {                @Override                public void onResponse(JSONObject jsonObject) {                    try {                        textView.setText(jsonObject.toString());                        com.alibaba.fastjson.JSONObject jsonObject1 = JSON.parseObject(jsonObject.toString());                        for (Map.Entry<string object> entry : jsonObject1.entrySet()) {                            System.out.println(entry.getKey() + ":" + entry.getValue());                        }                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }, new Response.ErrorListener() {        @Override        public void onErrorResponse(VolleyError volleyError) {            Log.e(TAG, volleyError.getMessage());        }    });</string></jsonobject></code>
ログイン後にコピー

Android JSON データ解析_PHP チュートリアル

这样,简单的数据解析就完成了。

何为JavaBean?

JavaBean是符合某种规范的java组件,也就是java类,它必须满足如下特性:

  • 有一个无参数的默认构造函数
  • 有get和set方法

我们把公司员工抽象成一个类,然后利用fastjson来解析

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">package com.djstava.fastjsondemo;/** * 包名称: com.djstava.fastjsondemo * 创建人: djstava * 创建时间: 15/9/28 上午11:07 */public class Employee {    private int num;    private String name;    private int age;    public Employee(int num, String name, int age) {        this.num = num;        this.name = name;        this.age = age;    }    public void setNum(int num) {        this.num = num;    }    public void setName(String name) {        this.name = name;    }    public void setAge(int age) {        this.age = age;    }    public int getNum() {        return num;    }    public String getName() {        return name;    }    public int getAge() {        return age;    }    @Override    public String toString() {        return "Employee{" +                "num=" + num +                ", name='" + name + '\'' +                ", age=" + age +                '}';    }}</code>
ログイン後にコピー

在Android Studio中,可以自动生成get、set、toString这些方法,Code->Generate,快捷键是Command + N。

Android JSON データ解析_PHP チュートリアル

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">Employee employee  = new Employee(1,"djstava",20);Log.e(TAG,JSON.toJSONString(employee));</code>
ログイン後にコピー

Android JSON データ解析_PHP チュートリアル

可以看出输出的json格式与我们类中定义的属性的顺序不一致,其实没有关系,json都是通过key去获取其对应的value的。

如果仅仅是想解析JavaBean类中某几个字段时,可以使用SimplePropertyPreFilter这个类来实现,将需要解析的字段添加进来,如将Employee类中的"num"和"name"解析出来

<code class="language-none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">SimplePropertyPreFilter simplePropertyPreFilter = new SimplePropertyPreFilter(Employee.class,"num","name");Log.e(TAG,JSON.toJSONString(employee,simplePropertyPreFilter));</code>
ログイン後にコピー

Android JSON データ解析_PHP チュートリアル

源码下载

http://download.csdn.net/detail/djstavav/9144789

参考文献

1、http://www.json.org/
2、https://github.com/alibaba/fastjson/wiki
3、https://www.juhe.cn/docs/api/id/39

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1077809.htmlTechArticleAndroid JSON数据解析 软硬件环境 Macbook Pro MGX 72 Android Studio 1.3.2 Genymotion模拟器 前言 如今的APP很少有不跟服务器打交道的,其中在轻量级的通...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート