JSON是一种取待XML的数据结构,和xml相比,它更小但描述能力却不差,由于它的小巧,所以网络传输数据将减少更多流量从而加快速度。
JSON就是一串字符串,只不过元素会使用特定的符号标注。键值对的方式,属性必须加双引号。
{}
双括号表示对象
[]
中括号表示数组
""
双引号内是属性或值
:
冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是个数组或者对象)
所以{“name”:“Michal”}可以理解为是一个包含name为MInchal的对象
而[{“name”:“Michael”},{“name”:“Jerry”}]就表示包含两个对象的数组
Json对象
对象.属性
”进行访问;var person={"name":"shily","sex":"女","age":"23"}//json对象
console.log(person);
console.log(person.name);
console.log(typeof person);
输出结果是:
Json字符串(所谓字符串:单引号或者双引号引起来)
var person='{"name":"shily","sex":"女","age":"23"}';//json字符串
console.log(person)
console.log(person.name)
console.log(typeof person)
输出结果为:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020070818014140.png
Json对象与Json字符串的相互转化
JSON.parse()
var str='{"name":"shily","sex":"女","age":"23"}';
var strToObj=JSON.parse(str);
console.log(strToObj);
console.log(typeof strToObj);
console.log(strToObj.name)
JSON.stringify()
var obj={"name":"shily","sex":"女","age":"23"}//json对象
var objToStr=JSON.stringify(obj);
console.log(objToStr);
console.log(typeof objToStr)
public static String createJsonString(String key, Object value) {
JSONObject jsonObject = new JSONObject();
jsonObject.put(key, value);
return jsonObject.toString();
}
put() 方法的第一个参数为 key 值,必须为 String 类型,第二个参数为 value,可以为 boolean、double、int、long、Object、Map 以及 Collection 等。当然,double 以及 int 等类型只是在 Java 中,写入到 json 中时,统一都会以 Number 类型存储
Map data=new HashMap
data.put("name","John");
data.put("sex","male");
data.put("age",22);
data.put("is_student",true)
JSONObject obj=new JSONObject(data);
//或者下面的这种写法,将java对象转换为json对象
JSONObject obj=JSONObject.fromObject(data);
fromObject
和parseObject
的区别
虽然都是返回JSONObject,但是:
JSONObject.parseObject(jsonStr);这个方法需要导入import com.alibaba.fastjson.JSONObject;
JSONObject.fromObject(jsonStr);这个方法需要导入import net.sf.json.JSONObject;
一般都是是用parseObject()
只包含一个对象的json字符串解析
//将得到json数据转换为一个json对象
JSONObject jsonObject=new JSONObject("data");
//获取persons的json对象
jsonObject=jsonObject.getJSONObject("persons");
//通过相应的get方法,获取其相应的属性
int id=jsonObject.getInt("id");
总结一句就是:
JSONObject jsonObject=new JSONObject("data").getJSONObject("persons")..getInt("id")
String name=jsonObject.getString("name")
//将获取到的数据放到一个person对象中
Person person=new Person(id,name);
含有多个对象的json字符串解析
List list=new ArrayList<>();
//将得到的json数据转化成一个json对象
JSONObject jsonObject=new JSONObject("data");
//获取persons的json对象,并将其转化为一个json数组
JSONArray array=jsonObject.getJsonArray("persons");
//通过循环获取数据,并放入list集合中
for(int i=0;ilength();i++){
int id=array.getJSONObject(i).getInt("id");
String name=array.getJSONObject(i).getString("name");
Person person=new Person(id,name);
list.add(person);
}
return list;
实体对象转换成Json字符串
String s = JSONObject.toJSONString(entryApplication);
Json字符串转为JSONObject对象
JSONObject json = JSONObject.parseObject(s);
[{name1:{name2:{name3:‘value1’,name4:‘value2’}}},{}]
对于这种json嵌套,只要记住符号“ :” 前是键后是值,大括号成对找,一层层拨开就清楚了。例子中就是一个数组,数据里面有两个json格式的字符串。如果我们想取出name4的值。
思路步骤:
JSONArray getJsonArray=JSONArray.fromObject(arrayStr);//将结果转换成JSonArray对象
JSONObject getJsonObj=getJsonArray.getObject(0)
String result=getJsonObj.getJSONObject("name1").getJSONObject("name2").getString("name4");
1,JSONObject
json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}
2,JSONArray
Json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的
Json对象中添加的是键值对,JSONArray中添加的是Json对象
JSONObject Json = new JSONObject();
JSONArray JsonArray = new JSONArray();
Json.put(“key”, “value”);//JSONObject对象中添加键值对
JsonArray.add(Json);//将JSONObject对象添加到Json数组中
JSON 和 Map
{"name":"Casey", "age":23, "job":"Teacher"}
{name = Casey, age = 23, job = Teacher}
JSONArray和ArrayList
[{"name":"Casey", "age":23}, {"name":"Allen", "age":25}]
[{name = Casey, age = 23}, {name = Allen, age = 25}]
参考:
json对象和json字符串的区别(https://www.cnblogs.com/wxh0929/p/11132073.html)
解析json(https://blog.csdn.net/qq_32253371/article/details/78083391)