Table of Contents
Android JSON data parsing
Software and hardware environment
Preface
JSON object
JSON array
Basic usage of FastJSON
创建工程
代码部分
何为JavaBean?
源码下载
参考文献
Home Backend Development PHP Tutorial Android JSON data parsing_PHP tutorial

Android JSON data parsing_PHP tutorial

Jul 12, 2016 am 09:03 AM
android

Android JSON data parsing

Software and hardware environment

  • Macbook Pro MGX 72
  • Android Studio 1.3.2
  • Genymotion Simulator

Preface

There are very few apps today that do not deal with servers. Among them, in lightweight communication interactions, JSON (JavaScript Object Notation) and XML is also known as the Heavenly Sword and Dragon-Slaying Sword of client-server interaction solutions. This article mainly introduces JSON-related knowledge.

JSON object

The object in JSON is included in a pair of curly brackets. Each item in the object is a "key:value" data pair, and the data pairs are separated by commas . The key of a JSON object can only be of String type, and the value may be of other types such as number, boolean, or null. As shown below

<code class="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>
Copy after login

JSON array

The JSON array is included in a pair of square brackets. Each element is a JSON object and is also separated by commas. The example is as follows

<code class="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>
Copy after login

Basic usage of FastJSON

FastJSON is a framework developed by Alibaba that specializes in parsing JSON. According to their own tests, it is very fast and efficient, and there is no other framework. Let's take a JSON data query for Suzhou city weather forecast from an aggregated data website as an example. The obtained URL address is http://v.juhe.cn/weather/index?format=2&cityname=Suzhou&key=6f9276e4d79c5d102bbfb28717beba93. To ensure there is no problem with the data source, you can open the URL in a browser to see if there is data. Here is another tool for Mac, JSON Accelerator, which can not only crawl from the Internet, but also add http request header information, which is very convenient to use.

Android JSON data parsing_PHP tutorial

创建工程

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

<code class="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>
Copy after login

代码部分

网络请求部分,这里我们使用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="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>
Copy after login

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

<code class="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>
Copy after login

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

<code class="none" style="-webkit-print-color-adjust:exact;margin:0px;padding:0px;border:none;border-radius:3px;background-color:transparent;">android:name=".VolleyApplication"</code>
Copy after login

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

Android JSON data parsing_PHP tutorial

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

<code class="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>
Copy after login

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

<code class="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>
Copy after login

Android JSON data parsing_PHP tutorial

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

何为JavaBean?

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

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

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

<code class="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>
Copy after login

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

Android JSON data parsing_PHP tutorial

<code class="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>
Copy after login

Android JSON data parsing_PHP tutorial

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

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

<code class="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>
Copy after login

Android JSON data parsing_PHP tutorial

源码下载

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很少有不跟服务器打交道的,其中在轻量级的通...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

New report delivers damning assessment of rumoured Samsung Galaxy S25, Galaxy S25 Plus and Galaxy S25 Ultra camera upgrades New report delivers damning assessment of rumoured Samsung Galaxy S25, Galaxy S25 Plus and Galaxy S25 Ultra camera upgrades Sep 12, 2024 pm 12:23 PM

In recent days, Ice Universe has been steadily revealing details about the Galaxy S25 Ultra, which is widely believed to be Samsung's next flagship smartphone. Among other things, the leaker claimed that Samsung only plans to bring one camera upgrade

Samsung Galaxy S25 Ultra leaks in first render images with rumoured design changes revealed Samsung Galaxy S25 Ultra leaks in first render images with rumoured design changes revealed Sep 11, 2024 am 06:37 AM

OnLeaks has now partnered with Android Headlines to provide a first look at the Galaxy S25 Ultra, a few days after a failed attempt to generate upwards of $4,000 from his X (formerly Twitter) followers. For context, the render images embedded below h

IFA 2024 | TCL\'s NXTPAPER 14 won\'t match the Galaxy Tab S10 Ultra in performance, but it nearly matches it in size IFA 2024 | TCL\'s NXTPAPER 14 won\'t match the Galaxy Tab S10 Ultra in performance, but it nearly matches it in size Sep 07, 2024 am 06:35 AM

Alongside announcing two new smartphones, TCL has also announced a new Android tablet called the NXTPAPER 14, and its massive screen size is one of its selling points. The NXTPAPER 14 features version 3.0 of TCL's signature brand of matte LCD panels

New report delivers damning assessment of rumoured Samsung Galaxy S25, Galaxy S25 Plus and Galaxy S25 Ultra camera upgrades New report delivers damning assessment of rumoured Samsung Galaxy S25, Galaxy S25 Plus and Galaxy S25 Ultra camera upgrades Sep 12, 2024 pm 12:22 PM

In recent days, Ice Universe has been steadily revealing details about the Galaxy S25 Ultra, which is widely believed to be Samsung's next flagship smartphone. Among other things, the leaker claimed that Samsung only plans to bring one camera upgrade

Vivo Y300 Pro packs 6,500 mAh battery in a slim 7.69 mm body Vivo Y300 Pro packs 6,500 mAh battery in a slim 7.69 mm body Sep 07, 2024 am 06:39 AM

The Vivo Y300 Pro just got fully revealed, and it's one of the slimmest mid-range Android phones with a large battery. To be exact, the smartphone is only 7.69 mm thick but features a 6,500 mAh battery. This is the same capacity as the recently launc

Samsung Galaxy S24 FE billed to launch for less than expected in four colours and two memory options Samsung Galaxy S24 FE billed to launch for less than expected in four colours and two memory options Sep 12, 2024 pm 09:21 PM

Samsung has not offered any hints yet about when it will update its Fan Edition (FE) smartphone series. As it stands, the Galaxy S23 FE remains the company's most recent edition, having been presented at the start of October 2023. However, plenty of

Xiaomi Redmi Note 14 Pro Plus arrives as first Qualcomm Snapdragon 7s Gen 3 smartphone with Light Hunter 800 camera Xiaomi Redmi Note 14 Pro Plus arrives as first Qualcomm Snapdragon 7s Gen 3 smartphone with Light Hunter 800 camera Sep 27, 2024 am 06:23 AM

The Redmi Note 14 Pro Plus is now official as a direct successor to last year'sRedmi Note 13 Pro Plus(curr. $375 on Amazon). As expected, the Redmi Note 14 Pro Plus heads up the Redmi Note 14 series alongside theRedmi Note 14and Redmi Note 14 Pro. Li

iQOO Z9 Turbo Plus: Reservations begin for the potentially beefed-up series flagship iQOO Z9 Turbo Plus: Reservations begin for the potentially beefed-up series flagship Sep 10, 2024 am 06:45 AM

OnePlus'sister brand iQOO has a 2023-4 product cycle that might be nearlyover; nevertheless, the brand has declared that it is not done with itsZ9series just yet. Its final, and possibly highest-end,Turbo+variant has just beenannouncedas predicted. T

See all articles