锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

JSON解析

时间:2022-09-05 11:30:00 薄型红外对射传感器光电开关ex

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;
}
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章