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对象之间相互转化

在需要用到JSON对象封装数据的时候,往往会写很多代码,也有很多复制粘贴,为了用POJO的思想我们可以装JSON转化为实体对象进行操作 1. [代码]工具类      ? 1 2 ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

JSON数据格式交换 C语言cJSON开源

1.JSON官方http://www.json.org/ 里面有很多JSON解析工具,分别用不同编程语言实现,比如C语言下流行的cJSON,除此之外还有很多C版本的工具,其他语言也类似有多个版本,根据...
  • js_gary
  • js_gary
  • 2017年06月09日 11:32
  • 644

[转]使用cJSON解析JSON字符串

转自:http://blog.csdn.net/lintax/article/details/50993958 JSON学习-使用cJSON解析    使用cJSON解析JSON字符串  ...
  • hailmy
  • hailmy
  • 2016年04月25日 20:07
  • 1075

使用gson解析并生成json数据

  • 2014年11月11日 22:36
  • 300KB
  • 下载

GSON方式生成和解析json数据

客户端与服务器进行数据交互时,常常需要将数据在服务器端将数据转化成字符串并在客户端对json数据进行解析生成对象。但是用jsonObject和jsonArray解析相对麻烦。利用Gson和阿里的fas...

QT生成解析复杂的JSON数据

  • 2016年10月17日 11:28
  • 3.26MB
  • 下载

FastJson生成和解析JSON数据

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

FastJson生成和解析JSON数据

生成和解析JSON数据格式的包有很多种:Gson、json-smart、FastJson、jackjson等,FastJson是一个阿里巴巴的大神开发的开源的Json处理工具包,包括“序列化”和“反序...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Json 数据的解析 ,生成
举报原因:
原因补充:

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