一、简述
因为 xml 整合到 html 中各个浏览器实现的细节不尽相同,所以从 JS 的数据类型中提取了一个子集,作为新的数据交换格式,因为主流的浏览器使用了通用的 JavaScript 引擎组件,所以在解析这种新数据格式时就不存在兼容性问题,于是将这种数据格式命名为 “JavaScript Object Notation”,缩写为 JSON。
二、JSON格式
1️⃣键值对形式
{
"person": {
"name": "wg",
"age": "18",
"sex": "female",
"hometown": {
"province": "浙江省",
"city": "杭州市"
}
}
}
这种结构的 JSON 数据规则是:一个无序的“名称/值”对
集合,一个对象以{
左括号开始,}
右括号结束。每个“名称”后跟一个:
冒号;“名称/值”对
之间使用,
逗号分隔。
2️⃣数组形式
["wg", 18, "female", "浙江省杭州市"]
数组形式的 JSON 数据就是值(value)的有序集合。一个数组以[
左中括号开始,]
右中括号结束。值之间使用,
逗号分隔。
三、JOSN的六种数据类型
JSON 内部都是包含 value 的,那 JSON 的 value 到底有哪些类型?
1️⃣String:字符串,必须要用双引号引起来。
2️⃣number:数值,与 JavaScript 的 number 一致,整数(不使用小数点或指数计数法)最多为 15 位。小数的最大位数是 17。
3️⃣object:JavaScript 的对象形式,{key:value}
表示方式,可嵌套。
4️⃣array:数组,JavaScript 的 Array 表示方式[value ]
,可嵌套。
5️⃣true/false:布尔类型,JavaScript 的 boolean 类型。
6️⃣null:空值,JavaScript的null。
四、应用示例
JSON.parseObject,是将 Json 字符串转化为相应的对象。JSON.toJSONString 则是将对象转化为 Json 字符串。
首先用maven引入fastjson
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wujiang.test</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<fastjson_version>1.2.28</fastjson_version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson_version}</version>
</dependency>
</dependencies>
</project>
定义一个 model 类,如下所示:
@Data
public class Staff {
private String name;
private Integer age;
private String sex;
private Date birthday;
}
测试:
import com.alibaba.fastjson.JSON;
public class jsonTest {
public static void main(String[] args) {
// json字符串转化为对象
String jsonString = "{name:'wg',age:18,sex:'female',telephone:'88888'}";
Staff staff = JSON.parseObject(jsonString, Staff.class);
System.out.println(staff.toString());
// 对象转化为json字符串
String jsonStr = JSON.toJSONString(staff);
System.out.println(jsonStr);
}
}
输出结果:
Staff{name='wg', age=18, sex='female', birthday=null}
{"age":18,"name":"wg","sex":"female"}
在 JSON.parseObject 的时候,会去填充名称相同的属性。对于 Json 字符串中没有,而 model 类有的属性,会为 null;对于 model 类没有,而 Json 字符串有的属性,不做任何处理。
五、test
import java.text.ParseException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.util.Map;
public class Testmain {
public static void main(String[] args) throws ParseException {
String str = "{abcdefgConfig:['123,aaa,wg;','456,bbb,xxp']}";
System.out.println(str);
//第一种方式
Map maps = (Map) JSON.parse(str);
System.out.println("---1.用JSON类来解析JSON字符串---");
for (Object map : maps.entrySet()) {
System.out.println(((Map.Entry) map).getKey() + " " + ((Map.Entry) map).getValue());
}
//第二种方式
Map mapTypes = JSON.parseObject(str);
System.out.println("---2.用JSON类的parseObject来解析JSON字符串---");
for (Object obj : mapTypes.keySet()) {
System.out.println("key为:" + obj + "值为:" + mapTypes.get(obj));
}
//第三种方式
Map mapType = JSON.parseObject(str, Map.class);
System.out.println("---3.用JSON类,指定解析类型,来解析JSON字符串---");
for (Object obj : mapType.keySet()) {
System.out.println("key为:" + obj + "值为:" + mapType.get(obj));
}
//第四种方式:JSONObject是Map接口的一个实现类
Map json = (Map) JSONObject.parse(str);
System.out.println("---4.用JSONObject类的parse方法来解析JSON字符串---");
for (Object map : json.entrySet()) {
System.out.println(((Map.Entry) map).getKey() + " " + ((Map.Entry) map).getValue());
}
//第五种方式:JSONObject是Map接口的一个实现类
JSONObject jsonObject = JSONObject.parseObject(str);
System.out.println("---5.用JSONObject的parseObject方法来解析JSON字符串---");
for (Object map : jsonObject.entrySet()) {
System.out.println(((Map.Entry) map).getKey() + " " + ((Map.Entry) map).getValue());
}
//第六种方式:JSONObject是Map接口的一个实现类
Map mapObj = JSONObject.parseObject(str, Map.class);
System.out.println("---6.用JSONObject的parseObject方法并执行返回类型来解析JSON字符串---");
for (Object map : mapObj.entrySet()) {
System.out.println(((Map.Entry) map).getKey() + " " + ((Map.Entry) map).getValue());
}
}
}
结果:
{abcdefgConfig:['123,aaa,wg;','456,bbb,xxp']}
---1.用JSON类来解析JSON字符串---
abcdefgConfig ["123,aaa,wg;","456,bbb,xxp"]
---2.用JSON类的parseObject来解析JSON字符串---
key为:abcdefgConfig值为:["123,aaa,wg;","456,bbb,xxp"]
---3.用JSON类,指定解析类型,来解析JSON字符串---
key为:abcdefgConfig值为:["123,aaa,wg;","456,bbb,xxp"]
---4.用JSONObject类的parse方法来解析JSON字符串---
abcdefgConfig ["123,aaa,wg;","456,bbb,xxp"]
---5.用JSONObject的parseObject方法来解析JSON字符串---
abcdefgConfig ["123,aaa,wg;","456,bbb,xxp"]
---6.用JSONObject的parseObject方法并执行返回类型来解析JSON字符串---
abcdefgConfig ["123,aaa,wg;","456,bbb,xxp"]
网友评论