JSON数据的生成和解析

JSON解析类可以分为以下几个类

  • JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External:  应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:newJSONObject().put("JSON", "Hello, World!")。Value类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。
  • JSONStringer:json文本构建类,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。每个 JSONStringer实体只能对应创建一个JSON text。
  • JSONArray:它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔,例如:[value1,value2,value3]。这个类的内部同样具有查询行为, get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULLobject。
  • JSONTokener:json解析类
  • JSONException:json中用到的异常

示例:

  • 用JSONObject构建json

<span style="font-size:18px;">public StringcreateJson(){
      try{
             JSONObject jsonObject=newJSONObject();
             jsonObject.put("id","1");
             jsonObject.put("name","李磊");
             jsonObject.put("age",30);
             return jsonObject.toString();
      }catch(Exception e){
             e.printStackTrace();
      }
      return "";
}</span>


得到的json数据为:

{"id":"1","name":"李磊","age":"30"}

  • 用JSONArray构建json数组

<span style="font-size:18px;">public String createJson() {
   List<Person> persons = getTestValues();
    try {
        JSONObjectjsonObject = new JSONObject();
        JSONArrayarray = new JSONArray();
        for (int i = 0;i < persons.size(); i++) {
           JSONObject person = new JSONObject();
            Person p= persons.get(i);
           person.put("id", p.getId());
           person.put("name", p.getName());
           person.put("age", p.getAge());
            array.put(person);
        }
       jsonObject.put("persons", array);
       System.out.println(jsonObject.toString());
        returnjsonObject.toString();
    } catch(Exception e) {
        // TODOAuto-generated catch block
        e.printStackTrace();
    }
    return"";
}</span>


得到这样的数据

{"persons":[{"id":"1","age":"30","name":"李磊"},{"id":"2","age":"25","name":"韩梅梅"}]}

  • 用JSONStringer构建json

<span style="font-size:18px;">public String createJson() {
    JSONStringerjsonStringer = new JSONStringer(); //新建JSONStringer对象
    try {
       jsonStringer.object(); //调用object()方法说明开始创建添加了头{(当然,要和endobject成对出现)
       jsonStringer.key("id").value("1"); //添加一个属性通过key("name")添加了属性了名称 通过value("value") 添加了属性的值
       jsonStringer.key("name").value("李磊");
       jsonStringer.key("age").value("30");
jsonStringer.endObject();//调用endobject()方法通知json创建完毕
System.out.println(jsonStringer.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return jsonStringer.toString();
}</span>


得到了这样的数据{"id":"1","name":"李磊","age":"30"}

  • 用JSONStringer构建json数组

<span style="font-size:18px;">public String createJson() {
   List<Person> persons = getTestValues();
    JSONStringerjsonStringer = new JSONStringer();
    try {
        jsonStringer.object();//创建一个新的JSONStringer对象用来存储生成的json数据
       jsonStringer.key("persons"); //调用key("persons")添加数组的key值
       jsonStringer.array(); //调用array()通知系统接下来的是一个数组 (和endarray()一起出现)
        for (int i =0; i < persons.size(); i++) {
            Personperson = persons.get(i);
           jsonStringer.object();//在循环内部通过object()方法  创建一对{} 然后将属性添加到大括号内
jsonStringer.key("id").value(person.getId());
jsonStringer.key("name").value(person.getName());
jsonStringer.key("age").value(person.getAge());
jsonStringer.endObject();
        }
       jsonStringer.endArray();
       jsonStringer.endObject();
System.out.println(jsonStringer.toString());
    } catch(Exception e) {
       e.printStackTrace();
    }
    returnjsonStringer.toString();
}</span>


生成的字符串

{"persons":[{"id":"1","name":"李磊","age":"30"},{"id":"2","name":"韩梅梅","age":"25"}]}

解析JSON数据

  • 解析一个最简单的json数据 数据为{"id":"1","name":"李磊","age":"30"}

<span style="font-size:18px;">public Person parserJson() {
    // TODO Auto-generated method stub
    String json ="{\"id\":\"1\",\"name\":\"李磊\",\"age\":\"30\"}";
    Person person = new Person();
    try {
              将json字符串转换为jsonTokener对象
        JSONTokener jsonTokener = newJSONTokener(json); //
此时还未读取任何json文本,直接读取就是一个JSONObject对象。
如果此时的读取位置在"name": 了,那么nextValue就是"李磊"(String)
调用jsonTokener的nextValue()方法  将json数据转换为jsonObject对象
JSONObject jsonObject = (JSONObject)jsonTokener.nextValue();
通过getString(keyname)获取需要的值       
person.setId(jsonObject.getString("id"));
       person.setName(jsonObject.getString("name"));
        person.setAge(jsonObject.getString("age"));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return person;
}</span>


  • 解析带有数组的数据

<span style="font-size:18px;">{"persons":[{"id":"1","name":"李磊","age":"30"},{"id":"2","name":"韩梅梅","age":"25"}]}
public List<Person> parserJson() {
String json ="{\"persons\":[{\"id\":\"1\",\"name\":\"李磊\",\"age\":\"30\"},{\"id\":\"2\",\"name\":\"韩梅梅\",\"age\":\"25\"}]}";
创建一个list 用来存储解析的信息    
List<Person> persons = new ArrayList<Person>();
    try {
将json字符串转换为jsonTokener对象,再转换为jsonObject对象
       JSONTokenerjsonTokener = new JSONTokener(json);
       JSONObject jsonObject = (JSONObject)jsonTokener.nextValue();       
通过getJSONArray("persons")获取json数组
JSONArray array =jsonObject.getJSONArray("persons");
       for (int i = 0; i < array.length(); i++){ 通过循环解析json数组
           JSONObject object =array.getJSONObject(i);
           Person person = new Person();
           person.setId(object.getString("id"));
           person.setName(object.getString("name"));
           person.setAge(object.getString("age"));
           persons.add(person);
       }  
   } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return persons;
} </span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值