Android中三种数据解析技术

     一、第一种方法用Android原生技术JSON来解析                

      1、什么是json

       json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过json来进行交换。尤其是对于web开发来说,json数据格式在客户端直接可以通过javascript来进行解析。

json一共有两种数据结构,一种是以 (key/value)对形式存在的无序的jsonObject对象,一个对象以“{”(左花括号)开始,“}”(右花括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

      2、JsonObject

       JsonObject是解析单组数据对象的API,解析数据要创建对应的JavaBean,注意Key要与解析时候的对应,下面直接上代码:

    JavaBean:

  package com.zero.cui.jsondemo;


/**
 * Created by y on 2018/5/7.
 */


public class TestInfo {
    private int id;
    private String name;
    private double height;
    private String imagePath;


    @Override
    public String toString() {
        return "TestInfo{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", height=" + height +
                ", imagePath='" + imagePath + '\'' +
                '}';
    }


    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public double getHeight() {
        return height;
    }


    public void setHeight(double height) {
        this.height = height;
    }


    public String getImagePath() {
        return imagePath;
    }


    public void setImagePath(String imagePath) {
        this.imagePath = imagePath;
    }


    public TestInfo(int id, String name, double height, String imagePath) {
        super();
        this.id = id;
        this.name = name;
        this.height = height;
        this.imagePath = imagePath;
    }

}

     

         MainActivity:

package com.zero.cui.jsondemo;


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;


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


public class MainActivity extends AppCompatActivity {
//第一种方法用Android原生技术JSON来解析
    //为了方便不去写json表,直接创建一个数据。
    String json = "{\n" +
            "\t\"id\":1, \"name\":\"帅龙\", \n" +
            "\t\"height\":175, \n" +
            "\t\"imagePath\":\"https://b-ssl.duitang.com/uploads/item/201511/26/20151126112617_vUaQf.jpeg\"\n" +
            "}\n";


    TestInfo testInfo = null;


    private TextView tv_native_last;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        tv_native_last = (TextView) findViewById(R.id.tv_native_last);


        try {
//            获取JSONObject实例
            JSONObject jsonObject = new JSONObject(json);
            int id = jsonObject.optInt("id");
            String name = jsonObject.optString("name");
            double height = jsonObject.optDouble("height");
            String imagePath = jsonObject.optString("imagePath");


//            封装java对象
            testInfo = new TestInfo(id,name,height,imagePath);
            Log.e("<<<",testInfo+"");
        } catch (JSONException e) {
            e.printStackTrace();
        }


        //        显示到文本框里
        tv_native_last.setText(testInfo.toString());


    }
}

  

   3、 JSONArray

     JsonArray是一个解析Json数组的API,int length();得到json数组中元素的个数;

JSONObject jsonObject = jsonArray.getJSONObject(i);  然后去拿一行单个的,包括复杂特殊的json数据怎样去解析,也是大同小异了,一层一层解析就行,下面上代码:

package com.zero.cui.jsondemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

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

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
//第一种方法用Android原生技术JSON来解析
    //为了方便不去写json表,直接创建一个数据。
    String json = "[\n" +
        "    {\n" +
        "        \"id\": 1,\n" +
        "        \"imagePath\": \"https://b-ssl.duitang.com/uploads/item/201511/26/20151126112617_vUaQf1.jpeg\",\n" +
        "        \"name\": \"\",\n" +
        "        \"height\": 175\n" +
        "    },\n" +
        "    {\n" +
        "        \"id\": 2,\n" +
        "        \"imagePath\": \"https://b-ssl.duitang.com/uploads/item/201511/26/20151126112617_vUaQf2.jpeg\",\n" +
        "        \"name\": \"\",\n" +
        "        \"height\": 176\n" +
        "    }\n" +
        "]";


    private ArrayList<TestInfo> list;
    private TextView tv_native_last;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv_native_last = (TextView) findViewById(R.id.tv_native_last);
        list = new ArrayList<>();
        try {
            JSONArray jsonArray = new JSONArray(json);
                for (int i = 0; i < jsonArray.length(); i++) {

                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    if (jsonObject != null) {
                    int id = jsonObject.optInt("id");
                    String name = jsonObject.optString("name");
                    double height = jsonObject.optDouble("height");
                    String imagePath = jsonObject.optString("imagePath");

                    //封装java对象
                    TestInfo testInfo = new TestInfo(id, name, height, imagePath);
                    list.add(testInfo);
                    Log.e("<<<", list + "");
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        //        显示到文本框里
        tv_native_last.setText(list.toString());

    }
}

      二、用Gson框架技术解析JSON:

先说一下Gson的特点 :解析没那么麻烦,代码量简洁,可以很方便地解析复杂的Json数据,而且谷歌官方也推荐使用。

如果要使用Gson来解析,首先要导入Gson的jar包。

jar包的下载路劲:https://mvnrepository.com/artifact/com.google.code.gson/gson

  1、将gson的jar包导入到项目libs目录下,或者直接通过Gradle添加依赖:

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'  

2、创建Gson对象:

Gson gson = new Gson(); 

3、通过创建的Gson对象调用fromJson()方法,返回该json数据对象的Java对象;

TestInfo textInfo = gson.fromJson(json, DemoInfo.class);  


Gson还可以将Java对象、Java对象的List 转换为json字符串{};

注意事项:记得创建对象的JavaBean类;要求json对象中的key的名称与Java对象的JavaBean类中的属性名要相同,否则解析不成功!

三、用Fastjson框架技术解析JSON:

1、用法跟Gson的用法步骤基本一样,导入Jar包 或者加入依赖:

  compile 'com.alibaba:fastjson:1.1.55.android'  


            2、利用Fastjson的JSON调用parseObject()方法,获取转换后的Java对象。

               TestInfo textInfo = JSON.parseObject(json, ShopInfo.class); 


     特点:Fastjson是用Java语言编写的高性能功能完善的JSON库。

它采用了一种“假定有序、快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。

Fastjson是阿里巴巴开源框架,已经开源到github上了,地址为:https://github.com/alibaba/fastjson

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值