JSON是一种轻量级的数据交换格式。采用完全独立于编程语言的文本格式来存储和表示数据。层次结构简洁明了,易于阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
json的每个数据都是由键值对(key:value)组成的;
每组数据之间使用","来分隔;
如果存在特殊字符需使用"\"进行转义;
使用大括号{ }来保存对象,每个对象由若干数据组成;
{"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen}
使用中括号[ ]保存数组(集合),数组(集合)中可以包含若干个对象
[{"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen},{"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen},{"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen}]
{
data : [
{"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen}, {"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen}, {"key1":value1,"key2":value2,"key3":value3,...,"keyn":valuen}
]
}
在计算机之间进行数据传递
JSON只允许使用UTF-8编码,不存在编码问题;
JSON内容仅包含(key:value)键值对,格式简单,不存在冗余结构,是一种轻量级的数据交换格式;
浏览器内置JSON支持,将数据用JSON发送至浏览器,可以之间使用JavaScript处理;因此,在开发互联网应用时,由于JSON简单便捷的特点,绝大多数RESTAPI都使用JSON作为数据传输格式;
在Java开发应用程序过程中,往往面临Java对象与JSON数据格式之间的互相转换,因此我们需要掌握如何使用第三方库来进行JSON解析;
常用解析JSON的第三方库:
Jackson、Gson、Fastjson等
什么是fastjson?
fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
Fastjson的优点
速度快、使用广泛、测试完备、使用简单、功能完备
fastjson主要使用JSON、JSONObject、JSONArray三个类。其中JSONObject与JSONArray继承自JSON
JSON类的主要作用是用于原始转换
常用方法:
序列化:将Java格式转换为Json格式的数据
反序列化:将Json格式的字符串转换成Java对象
- public class Demo {
- public static void main(String[] args) {
- PoliceStation ps1=new PoliceStation();
- ps1.setName("周县派出所");
- ps1.setAddr("周县456号");
- ps1.setTel("151234555237");
-
- //序列化:将Java格式转换为Json格式的数据
- String json1=JSON.toJSONString(ps1);
- System.out.println(json1);
- //反序列化:将Json格式的字符串转换成Java对象
- String jsonStr="{\"addr\":\"周县456号\",\"name\":\"周县派出所\",\"tel\":\"151234555237\"}";
- PoliceStation ps2=JSON.parseObject(jsonStr,PoliceStation.class);
- System.out.println(ps2);
-
- }
-
- }
JSONObject类主要用于封装key-value键值对数据,继承自LinkedHashMap接口
常用方法:
将JSON格式数据转化成指定自定义实例对象
JSON.parseObject(String text,Class
- public class Demo{
- public static void main(String[] args) {
- String jsonStr="{\r\n" +
- " \"temperature\": \"24℃~39℃\",\r\n" +
- " \"weather\": \"小雨\",\r\n" +
- " \"weather_id\": {\r\n" +
- " \"fa\": \"07\",\r\n" +
- " \"fb\": \"07\"\r\n" +
- " },\r\n" +
- " \"wind\": \"东北风3-5级\",\r\n" +
- " \"week\": \"星期一\",\r\n" +
- " \"city\": \"西安\",\r\n" +
- " \"date_y\": \"2022年07月11日\",\r\n" +
- " \"dressing_index\": \"炎热\",\r\n" +
- " \"dressing_advice\": \"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。\",\r\n" +
- " \"uv_index\": \"弱\",\r\n" +
- " \"comfort_index\": \"\",\r\n" +
- " \"wash_index\": \"不宜\",\r\n" +
- " \"travel_index\": \"较不宜\",\r\n" +
- " \"exercise_index\": \"较不宜\",\r\n" +
- " \"drying_index\": \"\"\r\n" +
- "}";
- //JSONObject继承自LinkedHashMap
- JSONObject weatherJsonobj=JSON.parseObject(jsonStr);
- System.out.println(weatherJsonobj);
- //根据key获取对应的value
- String city=weatherJsonobj.getString("city");
- System.out.println("城市:"+city);
- String wind=weatherJsonobj.getString("wind");
- System.out.println("风力:"+wind);
- String temperature=weatherJsonobj.getString("temperature");
- System.out.println("温度:"+temperature);
- String weather=weatherJsonobj.getString("weather");
- System.out.println("天气:"+weather);
- }
-
-
-
- }
JSONArray类主要用于封装数组集合类的数据,它继承自ArrayList
常用方法
将JSON格式的数据转换成指定的泛型集合
JSON.parseObject(String Text, Class
- public class Demo{
- public static void main(String[] args) {
- String s="{\r\n" +
- " \"title\": \"上海市政派出所信息\",\r\n" +
- " \"list\": [{\r\n" +
- " \"name\": \"文保分局沪东高校派出所\",\r\n" +
- " \"addr\": \"中山北一路801号\",\r\n" +
- " \"tel\": \"22027732\"\r\n" +
- " }, {\r\n" +
- " \"name\": \"文保分局沪西高校派出所\",\r\n" +
- " \"addr\": \"芙蓉江路55号\",\r\n" +
- " \"tel\": \"62751704\"\r\n" +
- " }, {\r\n" +
- " \"name\": \"水上公安局吴淞水上派出所\",\r\n" +
- " \"addr\": \"淞浦路187号\",\r\n" +
- " \"tel\": \"56671442\"\r\n" +
- " }, {\r\n" +
- " \"name\": \"水上公安局杨浦水上派出所\",\r\n" +
- " \"addr\": \"杨树浦路1291号\",\r\n" +
- " \"tel\": \"65898004\"\r\n" +
- " }, {\r\n" +
- " \"name\": \"水上公安局外滩水上派出所\",\r\n" +
- " \"addr\": \"中山东二路8弄3号\",\r\n" +
- " \"tel\": \"63305388\"\r\n" +
- " }, {\r\n" +
- " \"name\": \"水上公安局石洞口水上派出所\",\r\n" +
- " \"addr\": \"盛石路18号\",\r\n" +
- " \"tel\": \"56152176\"\r\n" +
- " }, {\r\n" +
- " },";
- JSONObject jsonObj=JSON.parseObject(s);
- System.out.println(jsonObj.getString("title"));
- //遍历方式一
- //获取key为list的value值(集合)
- //JSONArray extends java.util.ArrayList
- JSONArray jsonArray=jsonObj.getJSONArray("list");
- System.out.println(jsonArray.size());
- //遍历
- for(int i=0;i
- JSONObject item=jsonArray.getJSONObject(i);
- System.out.println("派出所的名称:"+item.getString("name"));
- System.out.println("派出所的地址:"+item.getString("addr"));
- System.out.println("派出所的电话:"+item.getString("tel"));
- System.out.println("--------------------------------------------");
- }
- }
- }