Android学习笔记---解析JSON格式数据

JSON即JavaScript Object Natation(JavaScript 对象表示法), 它是一种轻量级的数据交换格式,类似于XML但比XML更小、更快,更易解析, 由于它的小巧所以网络传输数据将减少更多流量从而加快速度, 是广泛被采用的客户端和服务端交互的解决方案,比如现在很多开放的API我们可以直接发送一个Get请求就可以获取到返回的数据都是服务器封装好的JSON格式的数据,所以我们需要掌握怎样从这些数据中获取到我们想要的数据。

比如我们需要根据ip地址来获取该ip的具体的一些信息(比如运营商、归属地)等可以通过一些公开的API的方式发生一个GET请求就可以获取,比如可以通过阿里提供的API:
如下是获取ip 220.181.57.217 http://ip.taobao.com/service/getIpInfo.php?ip=220.181.57.217返回的信息的情况:

可以看出返回的是一个JSON格式的数据。

JSON就是一串字符串 只不过元素会使用特定的符号标注。
{} 双括号表示对象
[] 中括号表示数组
“” 双引号内是属性或值
冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
所以 {“name”: “Michael”} 可以理解为是一个包含name为Michael的对象
而[{“name”: “Michael”}, {“name”: “Jerry”}]就表示包含两个对象的数组

JSON分为JSON Object(JSON对象)以及JSON Array(JSON数组),下面分别了解下它们的特点:
JSON Object数据的特点:
1.以”{“开始, 以”}”结束
2.对象中的每一个item都是一个key-value对, 表现为”key:value”的形式, key-value对之间使用逗号分隔. 如

{
    "name": "geek",
    "age"=25,
    "address": {
        "city": "shanghai",
        "country": "China"
    }
}

3.JSON对象的key只能是string类型的, 而value可以是string, number, false, true, null, Object对象甚至是array数组, 也就是说可以存在嵌套的情况。

JSON Array数据的特点:
1.以”[“开始, 以”]”结束
2.数组中的每一个元素可以是string, number, false, true, null, Object对象甚至是array数组
3.数组间的元素使用逗号分隔,如

[
    "dxy",
    25,
    {
        "city": "shanghai",
        "country": "China" }
]

解析JSON数据, 首先需要明确待解析的是JSON Object还是JSON array, 然后需要确定采用哪种解析技术。 android平台上一般有2种解析技术可供选择: android内置的JSONObject(需要引入org.json包)和google的开源gson库,一下主要讲解使用android内置的JSONObject(需要引入org.json包),更多方法使用的情况可以参考:JSON的三种解析方式

我们先将下面的一段数据封装成JSON Object。

{
    "phone" : ["123456789", "987654321"], // 数组 
    "name": "geek", // 字符串 
    "age"=25,  //数值
    "address": {"city": "shanghai","country": "China"} //Object对象
    "married" : false // 布尔值 
}

下面直接给出MainActivity中的代码:

package com.example.androidstudyjson;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class JsonObject extends Activity {
    private TextView textview;
    private Button button;
    JSONObject person;
    JSONArray phone;
    JSONObject address;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jsonobject);
        textview = (TextView) findViewById(R.id.tv);
        button = (Button) findViewById(R.id.bt);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    toJson();
                    //将第一个电话号码转换为数值和将名字转换为数值
                    phone.getLong(0); 
                    //获取city的值
                    address.get("city");
                    textview.setText(phone.getLong(0)+""+address.get("city"));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    //将数据封装成JSON格式
    public void toJson() throws Exception{
        //首先最外层是{},是创建一个对象 
        person = new JSONObject();   
        //第一个键phone的值是数组,所以需要创建数组对象
        phone = new JSONArray();
        phone.put("123456789").put("987654321");
        person.put("phone", phone);
        person.put("name", "geek");
        person.put("age", 25);
        //address的值是对象,所以又要创建一个对象 
        address = new JSONObject();  
        address.put("city", "shanghai").put("country", "China");
        person.put("address", address);
        person.put("married", false);
    }
}

你可能感兴趣的:(Android学习笔记---解析JSON格式数据)