Json 数据的解析 ,生成

原创 2015年11月18日 09:47:36

json详解


一. json定义:(通俗地说—其实就是android中客户端与服务器端交互的一种数据类型,类似xml,一般在数据传输时使用)


二. json的格式:

    创建json对象时,以 { 开始, 以 } 结束,对象的每个属性名与属性值之间以英文的 : 隔开,多个属性间以 , 隔开.  
必须注意的是:  并不是每个属性值的后面都有英文 , .必须在后面还有属性时才需要 ,  

一般有两种:

  1. 最长见的json对象
    { key1:value1,
    key2:value2 }

    value — 可以数组,也可以是json对象

{
    "address": {
        "country": "china",
        "province": "zhengzhou"
    },
    "age": 18,
    "married": false,
    "name": "fy",
    "phone": [
        "110",
        "13783635955"
    ]
}

此类json的解析 借助gson

Gson gson = new Gson();
    bean bean = gson.fromJson(JSONString, bean.class);  //JSONString为json对象

    String name = bean.getName();// fy
    String country = bean.getAddress().getCountry();//china
    String phone = bean.getPhone().get(1);//110

对应的bean类:
public class bean{


    /**
     * country : china
     * province : zhengzhou
     */

    private AddressEntity address;
    /**
     * address : {"country":"china","province":"zhengzhou"}
     * age : 18
     * married : false
     * name : fy
     * phone : ["110","13783635955"]
     */

    private int age;
    private boolean married;
    private String name;
    private List<String> phone;

    public void setAddress(AddressEntity address) {
        this.address = address;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setMarried(boolean married) {
        this.married = married;
    }

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

    public void setPhone(List<String> phone) {
        this.phone = phone;
    }

    public AddressEntity getAddress() {
        return address;
    }

    public int getAge() {
        return age;
    }

    public boolean isMarried() {
        return married;
    }

    public String getName() {
        return name;
    }

    public List<String> getPhone() {
        return phone;
    }

    public static class AddressEntity {
        private String country;
        private String province;

        public void setCountry(String country) {
            this.country = country;
        }

        public void setProvince(String province) {
            this.province = province;
        }

        public String getCountry() {
            return country;
        }

        public String getProvince() {
            return province;
        }
    }
}

2 . 形如 以数组存储json对象

[
    {
        "age": 18,
        "name": "jack"
    },
    {
        "age": 21,
        "name": "rose"
    }
]

此类json的解析 借助gson

JSONArray jsonArray = new JSONArray(JSONString);//首先将数据转换为数组
System.out.println("数组的长度为" + jsonArray.length());
for(int i=0;i<jsonArray.length();i++){         //遍历数组中的json

    JSONObject obj = jsonArray.optJSONObject(i);//得到的obj为{name:jack,age:18}
    Gson gson = new Gson();                     //使用gson去解析.
    bean bean = gson.fromJson(String.valueOf(obj), bean.class);//bean为json数据对应的bean类
    }
  对应的bean类为:
public class bean {
    /**
     * age : 20
     * name : jack
     */

    private int age;
    private String name;

    public void setAge(int age) {
        this.age = age;
    }

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

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}
  1. 形如 此类:
{ code:"0001",
message:{
    name:"fy",
    year:"2008"
    //也许message中还有其他字段
}
}

有时我们知道code,message是确定的, 但是message中的字段是不确定的.这样我们就要先得到code根据不同的code去找对应的message的bean类.


        JSONObject json = null;
        String code_order = null;
        String message = "";
        //  先将数据的code解析出来
     json = new JSONObject(data);
     code_order = (String) json.getString("code");
     message = json.getString("message");
//根据code找到对应的message的bean类
  bean fromJson =   gson.fromJson(message,com.example.pf.bean.class);
            String name = fromJson.getSFZH();
            String card = fromJson.getSFZXM();

三. JSONObject, JSONArray来构建json文本

生成下面的一个json文本:


     假设现在要创建这样一个json文本  
      {  
          "phone" : ["12345678", "87654321"], // 数组  
          "name" : "jack", // 字符串  
          "age" : 100, // 数值  
          "address" : { "country" : "china", "province" : "zhengzhou" }, // 对象  
          "married" : false // 布尔值  
      }  

    try {  
        // 首先最外层是{},是创建一个对象  
        JSONObject person = new JSONObject();  
        // 第一个键phone的值是数组,所以需要创建数组对象  
        JSONArray phone = new JSONArray();  
        phone.put("12345678").put("87654321");  
        person.put("phone", phone);  

        person.put("name", "yuanzhifei89");  
        person.put("age", 100);  
        // 键address的值是对象,所以又要创建一个对象  
        JSONObject address = new JSONObject();  
        address.put("country", "china");  
        address.put("province", "jiangsu");  
        person.put("address", address);    
        person.put("married", false);  
    } catch (JSONException ex) {  
        // 键为null或使用json不支持的数字格式(NaN, infinities)  
        throw new RuntimeException(ex);  
    }  

寄语:
以后再也不用担心碰到json不会解析的问题了.关于复杂数组型json解析请移步:
http://blog.csdn.net/fengltxx/article/details/51035430

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

超详细JSON解析步骤

JSON简介 JAVAScript Object Notation是一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性。 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了...

JSON数据造假和解析

客户端开发通常要从服务器获取数据,所以就需要调用后台的接口,然后获得后台返回的数据,根据这些数据的格式进行JSON解析。 由于后台返回的数据会有不同的格式,所以前端也要采取不同的JSON.parse(...

Android开发中使用fastJSON将json格式的数据快速解析生成实体类并附上实体类生成器

今天给大家讲讲Android中怎么利用fastJSON快速的将json格式的数据生成我们开发中需要的实体类。这是对Android客户端向服务端发送请求获取返回的json格式数据时,我们能够利用的快速的...

QT生成解析复杂的JSON数据

  • 2016-10-17 11:28
  • 3.26MB
  • 下载

JSON数据的生成和解析

JSON解析类可以分为以下几个类 JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External:  应...

Json数据解析和生成(C/C++, 使用CJson)

由于工作需要,需要对Json数据进行解析。查阅了很多资料,发现相比于boost和jsoncpp,CJson更加小巧好用,不需要太多的准备工作,只需要把CJson.c和CJson.h导入工程,即可使用。...

FastJson生成和解析JSON数据

生成和解析JSON数据格式的包有很多种:Gson、json-smart、FastJson、jackjson等,FastJson是一个阿里巴巴的大神开发的开源的Json处理工具包,包括“序列化”和“反序...

Android配置文件分享和JSON数据生成与解析

首先声明,我这里大体是讲的一个关于“Android配置文件分享和JSON数据生成与解析”的整体流程,具体数据库中的数据根据读者自己的项目来安排,如果您看不大懂也请您原谅,毕竟我说了,我只是新手。其实关...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)