zoukankan      html  css  js  c++  java
  • Fastjson的常用方法总结

    JSON简单介绍
      JSON 就是一种轻量级的数据交换格式,被广泛应用于 WEB 应用程序开发。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
    fastjson的使用
      fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
      在项目中添加fastjson的依赖(maven中央仓库可以直接查找到依赖信息)
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.70</version>
    </dependency>
    
    json对象与map、java对象、list的相互转换
    public class FastJsonTest {
    	public static void main(String[] args) {
    		// json字符串
    		String json = "{"code":"U0022S00001","fieldName":null,"yhzh":"620071008398037654","sfzhm":"330681199309146269","qysh":"9133060231121732XN","email":"18325672253@163.com","phone":"18312354321","name":"数据资源版本","dataSource":"资源来源","templateDataId":3}";
    		System.out.println("处理前字段信息: " + json + "
    ");
    		/*
    		 * 1. 字符串 与 json对象 的相互转换
    		 */
    		JSONObject jsonObject = JSONObject.parseObject(json);
    		System.out.println("字符串转json对象:" + jsonObject);
    		// Feature.OrderedField 可以固定字段顺序,使得转为jsonobject之后的字段顺序与原来的json字符串一致
    		JSONObject jsonObject2 = JSONObject.parseObject(json, Feature.OrderedField);
    		System.out.println("字符串转json对象[固定字段顺序]:" + jsonObject2);
    
    		String jsonStr = JSONObject.toJSONString(jsonObject);
    		System.out.println("json对象转字符串 :" + jsonStr);
    		// 
    		String jsonStr2 = JSONObject.toJSONString(jsonObject, SerializerFeature.WriteMapNullValue);
    		System.out.println("json对象转字符串[保留value为null的字段] :" + jsonStr2 + "
    ");
    		
    		/*
    		 * 2. map 与 jsonobject的转换
    		 */
    		Map<String, Object> map = new HashMap<>();
    		Set<String> set = jsonObject.keySet();
    		for (String key : set) {
    			map.put(key, jsonObject.get(key));
    		}
    		Iterator<Entry<String, Object>> it = jsonObject.entrySet().iterator();
    		while (it.hasNext()) {
    			Entry<String, Object> entry = it.next();
    			map.put(entry.getKey(), entry.getValue());
    		}
    		System.out.println("jsonobject转为 map:" + map);
    
    		String map2str = JSON.toJSONString(map);
    		JSONObject map2json = JSONObject.parseObject(map2str);
    		System.out.println("map转jsonobject:" + map2json + "
    ");
    
    		/*
    		 * 3.javabean 与 jsonobject转换
    		 * java对象需要实现getter/setter方法,否则数据无法填充
    		 * 
    		 * fastjson在对java对象进行序列化时,会抛弃值为null的key;需要设置SerializerFeature序列化属性
    		 * 
    		 */
    		BaseBean baseBean = JSON.parseObject(json, BaseBean.class);
    		System.out.println("jsonobject转为java对象:" + baseBean);
    		String bean2jsonStr = JSON.toJSONString(baseBean, SerializerFeature.DisableCircularReferenceDetect);
    		JSONObject bean2json = JSONObject.parseObject(bean2jsonStr);
    		System.out.println("java对象转为json对象:" + bean2json + "
    ");
    
    		/*
    		 * 4. list与json对象转换 json 转为list之后,就是一个数组,再转换为json的时候,应转为jsonarray.
    		 */
    		List list = java.util.Arrays.asList(jsonObject);
    		List list2 = Collections.singletonList(jsonObject);
    		System.out.println("json 转 list : " + list2);
    		String list2jsonStr = JSON.toJSONString(list2);
    		JSONArray list2json = JSONArray.parseArray(list2jsonStr);
    		System.out.println("list 转 jsonobject : " + list2json + "
    ");
    		
    //		jsonObject.put("111", null);
    //		System.out.println("设置value为null : " + jsonObject);
    	}
    
    	private static class BaseBean {
    		private String code;
    		private String fieldName;
    		private String yhzh;
    		private String sfzhm;
    		private String qysh;
    		private String email;
    		private String phone;
    		private String name;
    		private String dataSource;
    		private String templateDataId;
    
    		//省略 getter/setter部分
    	}
    }
    
    其他常用基本方法如下:

    size()   # json对象长度;
    isEmpty()   # json对象是否为空;
    containsKey(Object key)   #是否包含某个指定key;
    containsValue(Object value);   #是否包含某个指定value;
    get(Object key);   # 获取指定key对应的value
    getJSONObject(String key);   # 获取指定key对应的value,value为json对象
    getJSONArray(String key);   # 获取指定key对应的value,value为JSONArray
    getBytes(String key);   # 获取指定key对应value值的byte数组

    put(String key, Object value);   # 设置键值对,key不允许重复
    clear();   # 清空json对象


    JSONObject 本质还是 map,有与map相同的两个方法:
    Set keySet();   # 获取key的Set集合
    Set<Map.Entry<String, Object>> entrySet();   # 获取JSONObject的键值对集合,常用json对象的遍历。

    fastjson对于null值的处理

      fastjson 设置某个key的value为null, 在序列化输出时,会丢失这个key 。这里需要时会用 SerializerFeature.WriteMapNullValue 序列化属性设置,使null值输出。
    SerializerFeature序列化属性如下:
    QuoteFieldNames  # 输出key时是否使用双引号,默认为true
    WriteMapNullValue   # 是否输出值为null的字段,默认为false
    WriteNullNumberAsZero   # 数值字段如果为null,输出为0,而非null
    WriteNullListAsEmpty    # List字段如果为null,输出为[],而非null
    WriteNullStringAsEmpty    #字符类型字段如果为null,输出为”“,而非null
    WriteNullBooleanAsFalse    # Boolean字段如果为null,输出为false,而非null

  • 相关阅读:
    c#基础之Type
    .Net IOC框架入门之三 Autofac
    EF的三种数据加载方式
    EntityFramework扩展之第三方类库
    EF Codefirst入门之创建数据库
    EasyUI combotree的使用
    MacOS 安装 gdb 踩过的坑
    enex 转 md 格式的几种方式(免费版/氪金版)
    C++ 标准库之 iomanip 、操作符 ios::fixed 以及 setprecision 使用的惨痛教训经验总结
    python list 中 remove 的骚操作/易错点
  • 原文地址:https://www.cnblogs.com/waiting-ying/p/13050884.html
Copyright © 2011-2022 走看看