带你了解“JSON解析”

前言

        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---用途

        在计算机之间进行数据传递

 JSON---特点

        JSON只允许使用UTF-8编码,不存在编码问题;

        JSON内容仅包含(key:value)键值对,格式简单,不存在冗余结构,是一种轻量级的数据交换格式;

        浏览器内置JSON支持,将数据用JSON发送至浏览器,可以之间使用JavaScript处理;因此,在开发互联网应用时,由于JSON简单便捷的特点,绝大多数RESTAPI都使用JSON作为数据传输格式;

Java解析JSON

        在Java开发应用程序过程中,往往面临Java对象与JSON数据格式之间的互相转换,因此我们需要掌握如何使用第三方库来进行JSON解析;

常用解析JSON的第三方库:

        Jackson、Gson、Fastjson等

使用Fastjson解析JSON

 什么是fastjson?

         fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

Fastjson的优点

        速度快、使用广泛、测试完备、使用简单、功能完备

  Fastjson主要对象

fastjson主要使用JSON、JSONObject、JSONArray三个类。其中JSONObject与JSONArray继承自JSON

 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类

        JSONObject类主要用于封装key-value键值对数据,继承自LinkedHashMap接口

常用方法:

将JSON格式数据转化成指定自定义实例对象

JSON.parseObject(String text,Class<T> clazz)

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类

        JSONArray类主要用于封装数组集合类的数据,它继承自ArrayList

常用方法

将JSON格式的数据转换成指定的泛型集合

JSON.parseObject(String Text, Class<T> clazz)

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<jsonArray.size();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("--------------------------------------------");
		}
    }
}

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾远望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值