作用
JSONobject如果知道入参是什么,是可以直接获取到数据的,不用强转成对应的对象再获取数据
public class TestJson {
public static void main(String[] args){
String json0 = "{\"username\": \"周杰伦\", \"music\": \"七里香\"}";
JSONObject jsonObject0 = JSON.parseObject(json0);
String productCode0 = jsonObject0.getString("music");
System.out.println(productCode0); //七里香
}
}
查看下JSONObject源码:
public class JSONObject extends JSON implements Map<String, Object>, Cloneable, Serializable, InvocationHandler{}
由 JSONObject 可以看出它是一个 map 集合,getString() 方法实现如下:
public String getString(String key) {
Object value = get(key);
if (value == null) {
return null;
}
return value.toString();
}
可以看出其实是依赖 get(key) 方法,get(key) 方法的实现如下:
public Object get(Object key) {
Object val = map.get(key);
if (val == null && key instanceof Number) {
val = map.get(key.toString());
}
return val;
}
即底层实现是 map 通过 key 查 value 的过程,所以处理 JSONObject 时候可以把它看作一个 map 来做操作,不必一定强转成对象再处理
更深层次的用法
package com.test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class TestJson {
public static void main(String[] args) {
String json0 = "{\"username\": \"周杰伦\", \"music\": \"七里香\"}";
JSONObject jsonObject0 = JSON.parseObject(json0);
String productCode0 = jsonObject0.getString("music");
System.out.println(productCode0); //七里香
String json = "{ \"id\":1," +
"\"status\":0," +
"\"msg\":\"success\"," +
"\"data\":" +
"{\"city\":\"利物浦\"," +
"\"music\":" +
"[{\"name\":\"七里香\",\"star\":\"周杰伦\"}," +
"{\"name\":\"遇见\",\"star\":\"孙燕姿\"}]," +
"\"movie\":{\"name\":\"大话西游\",\"director\":\"周星驰\"}" +
"}" +
"}";
JSONObject jsonObject = JSON.parseObject(json);
JSONObject jsonData = jsonObject.getJSONObject("data");
System.out.println(jsonData);//{"music":[{"star":"周杰伦","name":"七里香"},{"star":"孙燕姿","name":"遇见"}],"movie":{"director":"周星驰","name":"大话西游"},"city":"利物浦"}
String city = jsonData.getString("city");
System.out.println(city);//利物浦
JSONArray jsonIndex = jsonData.getJSONArray("music");
//获取jsonindex的数据有三种方法
// 方法一
System.out.println(jsonIndex.getString(0));//{"star":"周杰伦","name":"七里香"}
System.out.println(jsonIndex.getString(1));//{"star":"孙燕姿","name":"遇见"}
// 方法二
JSONObject jsonObject1 = jsonIndex.getJSONObject(0);
System.out.println(jsonObject1.getString("name"));//七里香
System.out.println(jsonObject1.getString("star"));//周杰伦
// 方法三 用于对象内容比较多的时候
for (int i = 0; i < jsonIndex.size(); i++) {
JSONObject partDaily = jsonIndex.getJSONObject(i);
System.out.println(partDaily.getString("name"));
System.out.println(partDaily.getString("star"));
}
}
}