JSON解析

JSON简介

   JSON 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集,采用完全独立于编程语言的文本格式来储存和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人们的阅读和编写,同时也易于机器的解析和生产,并有效地提升网络传输效率。
   在json中通常是使用{}来保存对象的,每个对象是由若干的数据(由key:value)组成。
    用Java解析JSON时,以fastjson为例:
    fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将java Bean 序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。但是在使用Fastjson时,要先在java中导包(将相关的包加到工作空间中)。
    fastjson最常用的就是这三个类,它们的关系情况如图:

在这里插入图片描述
序列化
将Java对象序列化转换为JSON字符串:
方法:

JSON.toJSONString(Object object)
// 实体数据
Weather weather = new Weather();
weather.setCity("西安");
weather.setComfort_index("非常舒适");
weather.setDate_y("2022年07月10日");

// 转换为json格式的字符串
String json = JSON.toJSONString(weather);
System.out.println(json);

注解:如果需要自定义json中的key,可以使用@JSONField注解在成员变量进行设置

反序列化
将JSON字符串反序列化为Java对象:

 方法:
 JSON.parseObject(String text)
// json格式数据
String jsonStr = "{\"temperature\":\"29℃~41℃\",\"weather\":\"多云转阴\",\"weather_id\":{\"fa\":\"01\",\"fb\":\"02\"},\"wind\":\"东北风微风\",\"week\":\"星期日\",\"city\":\"西安\",\"date_y\":\"2022年07月10日\",\"dressing_index\":\"炎热\",\"dressing_advice\":\"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。\",\"uv_index\":\"中等\",\"comfort_index\":\"\",\"wash_index\":\"较适宜\",\"travel_index\":\"较不宜\",\"exercise_index\":\"较不宜\",\"drying_index\":\"\"}";

// 转换成JSONObject
JSONObject jsonObj = JSON.parseObject(jsonStr);
System.out.println("日期:" + jsonObj.getString("date_y"));
System.out.println("城市:" + jsonObj.getString("city"));
System.out.println("天气:" + jsonObj.getString("weather"));
System.out.println("温度:" + jsonObj.getString("temperature"));

方法:

 JSON.parseArray(String text) 
// json格式数据
String jsonStr = "[{ \"name\": \"文保分局沪东高校派出所\", \"addr\": \"中山北一路801号\", 			\"tel\": \"22027732\" 		}, { 			\"name\": \"文保分局沪西高校派出所\", 			\"addr\": \"芙蓉江路55号\", 			\"tel\": \"62751704\" 		}, { 			\"name\": \"水上公安局吴淞水上派出所\", 			\"addr\": \"淞浦路187号\", 			\"tel\": \"56671442\" 		}, { 			\"name\": \"水上公安局杨浦水上派出所\", 			\"addr\": \"杨树浦路1291号\", 			\"tel\": \"65898004\" 		}, { 			\"name\": \"水上公安局外滩水上派出所\", 			\"addr\": \"中山东二路8弄3号\", 			\"tel\": \"63305388\" 		}, { 			\"name\": \"水上公安局石洞口水上派出所\", 			\"addr\": \"盛石路18号\", 			\"tel\": \"56152176\" 		}, { 			\"name\": \"轨道分局上海火车站站派出所\", 			\"addr\": \"共和新路2838号\", 			\"tel\": \"56650472\" }]";

// 转换成JSONArray
JSONArray jsonArray = JSON.parseArray(jsonStr);

// 遍历JSONArray
for(int i =0 ; i <jsonArray.size(); i++) {
    JSONObject item = jsonArray.getJSONObject(i);
    System.out.println(item);
}

JavaObject类
JavaObject类主要用于封装key-value键值对数据,它继承自LinkedHashMap接口。
可以将JSON格式的数据,转换成指定的自定义实体类对象。

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

JAONArray类
JSANArray类主要用于封装数组集合类的数据,它继承自ArrayList类。
将JSON格式的数据,转换成指定的泛型集合。

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

常见问题
**一、**FastJson默认过滤null值,不显示null值字段。(解决方法:转换成JSON字符串时,使用Feature枚举值进行设置)。

Map<String, Object> map = new HashMap<String, Object>(){
    {
        put("age", 18);
        put("name", "张三");
        put("sex", null);
    }
};
// 使用Feature类型的枚举值进行设置
System.out.println(JSONObject.toJSONString(map,Feature.WriteMapNullValue));
   **二、** 控制JSON的字段顺序
   (使用@JSONFiled注解的ordinal属性进行配置)。
import com.alibaba.fastjson2.annotation.JSONField;

public class PoliceStation {
	@JSONField(ordinal = 1)
	private String name;
	
	@JSONField(ordinal = 2)
	private String addr;
	
	@JSONField(ordinal = 3)
	private String tel;
}
   **三、** 控制JSON的Date字段格式。
   (使用@JSONFiled注解的format属性进行格式配置)。
// 订单类
public class Order{
	// 订单编号
	private String orderId;
	
	// 创建日期
	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
	private LocalDateTime creationTime;
}
  • 32
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值