二、构造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"]}