二、构造json文本(二)

//  { 

//      "phone" : ["12345678", "87654321"], // 数组 

//      "name" : "apple", // 字符串 

//      "age" : 22, // 数值 

//      "address" : { "country" : "china", "province" : "上海" }, // 对象 

//      "married" : false // 布尔值 

//  } 

JSONStringer jsonBuilder = new JSONStringer();

jsonBuilder.object();//开始的对象标识{

sonBuilder.key("phone");//第一个key值

jsonBuilder.array();//对应的值是一个数组,所以写个数组标识

jsonBuilder.value(12345678);//数组里面的值

jsonBuilder.value(87654321);

jsonBuilder.endArray();//数组的结束标识

jsonBuilder.key("name");

jsonBuilder.value("apple");

jsonBuilder.key("age");

jsonBuilder.value(22);

jsonBuilder.key("address");

jsonBuilder.object();

jsonBuilder.key("country");

jsonBuilder.value("china");

jsonBuilder.key("province");

jsonBuilder.value("上海");

jsonBuilder.endObject();

jsonBuilder.key("married");

jsonBuilder.value(false);

jsonBuilder.endObject();//结束的对象标识}

用JSONStringer生成json文本,一定要注意有开始标识就要有结束标识,不可少。

在这里再讲一个值得注意的问题:json的put和accumulate()添加数据的时候,如果key键一样,会有不一样的效果。

在用JSONObject json = new JSONObject();put的时候

json.put("one", student);
json.put("one", "haha");

在key一样的时候,json会以最后一次put进去的值为准,也就是说第一次添加进去key="one"的值student会被替换成为"haha"。运行json.toString()后的结果为:{"one":"haha"}

在用JSONObject json = new JSONObject();accumulate的时候

json.accumulate("student", student1);
json.accumulate("student", student2);
json.accumulate("student", false);
json.accumulate("student", "haha");

在以accumulate方式添加数据的时候,accumulate意为累积,也就是把key值相等的后面加进来的数据合并为一个JSONArray数组,运行json.toString()结果为:{"student":[{"age":1,"name":"aa"},{"age":2,"name":"bb"},false,"haha"]}