转载网址:https://blog.youkuaiyun.com/changhenshui1990/article/details/69950663
https://www.cnblogs.com/liduanwen/p/5951543.html
http://www.jb51.net/article/85785.htm
1.JSONObject:json 对象,使用大括号{ },如{key:value},就是一种特殊格式的map,存放键值对
类似:{"userid":"1001","success":true,''result'':[{"name":"张三"},{"age":"20"}]}2.JSONArray: json 数组,使用中括号,JSONArray 中添加的是 json 对象
例如:
[
{"userid":"1001","success":true,''result'':[{"name":"张三"},{"age":"20"}]},
{"userid":"1001","success":true,''result'':[{"name":"张三"},{"age":"20"}]},
{"userid":"1001","success":true,''result'':[{"name":"张三"},{"age":"20"}]}
]
由JSON数组的格式可发现,类似于List<Map<String,Object>>对象,可以说jsonArray对象就是特殊的listMap对象。
总结:json 对象添加的是键值对,JSONArray 中添加的是 json 对象
3.示例:
JSONObject json = new JSONObject();
JSONArray jsonArray = new JSONArray();
json.put("key1", "value1");//JSONObject 对象中添加键值对
json.put("key2", "value2");//JSONObject 对象中添加键值对
jsonArray.add(json);// 将 JSONObject 对象添加到 Json 数组中
System.out.println(jsonArray);//[{"key1":"value1","key2":"value2"}]
4.遍历JsonArray
String jsonStr = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'}]";// 首次把字符串转成 JSONArray 对象JSONArray json = JSONArray.fromObject(jsonStr);if (json.size() > 0) { for (int i = 0; i < json.size(); i++) { // 遍历 jsonarray 数组,把每一个对象转成 json 对象 JSONObject job = json.getJSONObject(i); System.out.println(job); // 得到每个对象中的属性值 System.out.println("name:"+job.get("name")+" ,value:"+job.get("value")); }}
输出结果:
{"name":"a","value":"aa"}
name:a ,value:aa
{"name":"b","value":"bb"}
name:b ,value:bb
{"name":"c","value":"cc"}
name:c ,value:cc
5.遍历 JSONObject
JSONObject json = new JSONObject();
JSONArray jsonArray = new JSONArray();
json.put("key1", "value1");//JSONObject 对象中添加键值对
json.put("key2", "value2");//JSONObject 对象中添加键值对
Iterator it = json.keys();
while (it.hasNext()) {
String key = (String) it.next();
String value = json.getString(key);
System.out.println(value);//value1 value2
6.思考:[{name1:{name2:{name3:'value1',name4:'value2'}}},{}] 如何取出 name4 的值?
对于json嵌套,只要记住符号“:”前是键,符号后是值大括号成对找,一层层剥开,就清楚了.
例子中就是一个数组,数组里面是两个json格式的字符串。
取出name4值过程步骤:
1,将以上字符串转换为JSONArray对象;
1,将以上字符串转换为JSONArray对象;
2,取出对象的第一项,JSONObject对象;
3,取出name1的值JSONObject对象;
4,取出name2的值JSONObject对象;
5,取出name4的值value2。
示例中json数组格式的字符串可以通过方法直接转换为JSONArray的格式:
JSONArray.fromObject(String)
- JSONArray getJsonArray=JSONArray.fromObject(arrayStr);//将结果转换成JSONArray对象的形式
- JSONObject getJsonObj = getJsonArray.getJSONObject(0);//获取json数组中的第一项
- String result=(String)getJsonObj.getJSONObject("name1").getJSONObject("name2").get("name4");
7.用法示例补充:
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class Test {
// 创建 JSONObject 对象
private static JSONObject createJSONObject(){
JSONObject json = new JSONObject();
json.put("username", "粉红猪小妹");//JSONObject 对象中添加键值对
json.put("sex", "女");//JSONObject 对象中添加键值对
json.put("QQ", "528528");
json.put("nickName", "小猪佩奇");
return json;
}
public static void main(String[] args) {
// 静态方法,直接通过类名+方法调用
JSONObject jsonObject = Test.createJSONObject();
// 输出 jsonObject 对象
System.out.println("jsonObject:"+jsonObject);
// 判断输出对象的类型
boolean isArray = jsonObject.isArray();
boolean isEmpty = jsonObject.isEmpty();
boolean isNullObject = jsonObject.isNullObject();
System.out.println("是否为数组:"+isArray+",是否为空:"+isEmpty+",isNullObject:"+isNullObject);
// 添加属性,在 jsonObject 后面追加元素
jsonObject.element("address", "阿里");
System.out.println("添加属性后的对象 jsonObject:"+jsonObject);
// 返回一个 JSONArray 对象
JSONArray jsonArray = new JSONArray();
jsonArray.add(0, "this is a jsonArray value");
jsonArray.add(1, "another jsonArray value");
jsonObject.element("jsonArray", jsonArray);
// 在 jsonObject 后面加一个 jsonArray
JSONArray array = jsonObject.getJSONArray("jsonArray");
System.out.println(jsonObject);
System.out.println("返回一个 JSONArray 对象:"+array);
// 添加 jsonArray 后的值
System.out.println("结果 = "+jsonObject);
// 根据 key 返回一个字符串
String username = jsonObject.getString("username");
System.out.println("username ==> "+username);
// 把字符串转换为 JSONObject
String temp = jsonObject.toString();
JSONObject object = JSONObject.fromObject(temp);
// 转换后根据key返回值
System.out.println("qq = "+object.get("QQ"));
}
}
返回结果:
jsonObject:{"username":"粉红猪小妹","sex":"女","QQ":"528528","nickName":"小猪佩奇"}
是否为数组:false,是否为空:false,isNullObject:false
添加属性后的对象 jsonObject:{"username":"粉红猪小妹","sex":"女","QQ":"528528","nickName":"小猪佩奇","address":"阿里"}
{"username":"粉红猪小妹","sex":"女","QQ":"528528","nickName":"小猪佩奇","address":"阿里","jsonArray":["this is a jsonArray value","another jsonArray value"]}
返回一个 JSONArray 对象:["this is a jsonArray value","another jsonArray value"]
结果 = {"username":"粉红猪小妹","sex":"女","QQ":"528528","nickName":"小猪佩奇","address":"阿里","jsonArray":["this is a jsonArray value","another jsonArray value"]}
username ==> 粉红猪小妹
qq = 528528
是否为数组:false,是否为空:false,isNullObject:false
添加属性后的对象 jsonObject:{"username":"粉红猪小妹","sex":"女","QQ":"528528","nickName":"小猪佩奇","address":"阿里"}
{"username":"粉红猪小妹","sex":"女","QQ":"528528","nickName":"小猪佩奇","address":"阿里","jsonArray":["this is a jsonArray value","another jsonArray value"]}
返回一个 JSONArray 对象:["this is a jsonArray value","another jsonArray value"]
结果 = {"username":"粉红猪小妹","sex":"女","QQ":"528528","nickName":"小猪佩奇","address":"阿里","jsonArray":["this is a jsonArray value","another jsonArray value"]}
username ==> 粉红猪小妹
qq = 528528