Json基础--FastJson常用几个方法和枚举类

JavaScript , JSON

在JS中,一切都是对象.因此,任何支持的类型都可以通过JSON来表示,例如:字符串,数字,对象,数组等.

下面是JS的要求和语法格式:

  • 对象表示为键值对

  • 数据又逗号分割

  • 花括号保存对象

  • 方括号保存数组

JSON键值对是用来保存JS对象的一种方式,和JS对象的写法也大同小异,键值对组合中的键名写在前面,值用双引号""包裹,使用冒号:分割,然后紧接着值:

{"name": "小明"}
{"age": "15"}
{"sex": "男"}

JSON与js对象的关系,可以这么理解:

JSON是JS对象的字符串表示法,他使用文本表示一个JS对象的信息,本质是一个字符串.

var obj = {"name":'xiaohong',age:"18"};  //这是一个对象,注意键名也是可以使用引号包裹的
var json = {"a":"小红","age":"18"}; //这是一个JSON字符串,本质是一个字符串

JSON 和 JS 对象转换

要实现从JSON字符串转为JS对象,使用JSON.parse()方法;

var obj = JSON.parse("name":"xiaohong","age":"18"); //结果是{name:'xiaohong',age:'18'}  

要实现从JS对象转为JSON字符串,使用JSON.parse()方法;

var json = JSON.stringify(name:'xiaohong',age:'18');//结果是'{"name":"xiaohong","age":"18"}'

代码

复制代码
//编写一个对象
var userName ={
a : "小红",
b : "小黄",
c : "小兰"
}
//输出这个JS对象
console.log(userName);
//将js对象转换为json字符串
var json = JSON.stringify(userName);
console.log(json)
//将json字符串转换为js对象
var jsDx = JSON.parse(json);
console.log(jsDx)
复制代码

处理乱码,在Spring-Mvc配置文件中

复制代码
    <!-- 开启注解 -->
    <mvc:annotation-driven >
        <!--JSON格式化乱码处理方式-->
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8" />
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters></mvc:annotation-driven>
复制代码

 

JAVA :FASTTJSON

FastJson序列化API

序列化:是指将Java对象转成json格式字符串的过程,JavaBean对象,List集合对象,Map集合,为应用最为广泛:

  • JSON.toJSONString

    • 序列化对象

    • 复制代码
          /**
           *java中的对象,Student对象,序列化为JSON格式字符串
           *
           **/
          @RequestMapping("/demo1")
          @ResponseBody
          public String toObjectToJson(){
              SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
              String date = simpleDateFormat.format(new Date());
              Student student =  new Student();
              student.setAge(22);
              student.setBirthday(date);
              student.setEmail("2409956979@qq.com");
              student.setId(10001);
              student.setName("小米");
              //sutdent对象,转JSON格式字符串
              Map<String,Object> mapData = new HashMap<>();
              mapData.put("message","成功");
              mapData.put("data",student);
              mapData.put("errCode","0");
              //调用FastJson的静态方法,转换json字符串
              String jsonString = JSON.toJSONString(mapData);
      ​
              return jsonString;
          }
      复制代码

       

    • 将list集合序列化为JSon字符串,转换后为数组格式

    • 复制代码
          public   List<Student> xsData(){
              List<Student> list = new ArrayList<>();
              Student student =  new Student();
              SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
              String date = simpleDateFormat.format(new Date());
              student.setAge(43);
              student.setBirthday(date);
              student.setEmail("2409956979@qq.com");
              student.setId(10001);
              student.setName("小将");
              student.setAge(24);
              student.setBirthday(date);
              student.setEmail("2409956979@qq.com");
              student.setId(10002);
              student.setName("小蓝");
              student.setAge(22);
              student.setBirthday(date);
              student.setEmail("2409956979@qq.com");
              student.setId(10003);
              student.setName("小西");
              list.add(student);
              return list;
          }
              /**
           *java中的对象,List象,序列化为JSON格式字符串
           *
           **/
          @RequestMapping("/demo2")
          @ResponseBody
          public String toListToJson(){
              SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
              String date = simpleDateFormat.format(new Date());
              Student student =  new Student();
              student.setAge(22);
              student.setBirthday(date);
              student.setEmail("2409956979@qq.com");
              student.setId(10001);
              student.setName("小米");
              //sutdent对象,转JSON格式字符串
              List<Student> list = xsData();
              list.add(student);
              Map<String,Object> mapData = new HashMap<>();
              mapData.put("message","成功");
              mapData.put("data",list);
              mapData.put("errCode","0");
              //调用FastJson的静态方法,转换json字符串
              String jsonString = JSON.toJSONString(mapData);
      ​
              return jsonString;
          }
      ​
      复制代码

       

      • JSON格式字符串,反序列化为Java对象

      复制代码
          /**
           * JSON字符串,反序列化为Java对象
           */
          @RequestMapping("/jsonZHStudent")
          public   @ResponseBody Student toJsontoObject(){
              String json = "{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10001,\"name\":\"小米\"}";
              //fastJson类的静态方法parseObject
              //传递要反序列化的json字符串,传递JAVA的class对像
              Student student = JSON.parseObject(json, Student.class);
      ​
              return  student;
          }
      ​
          /**
           * JSON字符串,反序列化为List集合
           */
          @RequestMapping("/jsonZHList")
          public   @ResponseBody List<Student> toJsontoList(){
              String json = "[{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10003,\"name\":\"小西\"},{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10001,\"name\":\"小米\"}]";
              //fastJson类的静态方法parseObject
              //传递要反序列化的json字符串,传递转换后的集合的泛型的class对象
              List<Student> student = JSON.parseArray(json, Student.class);
      ​
              return  student;
          }
      ​
          /**
           * JSON字符串,反序列化为Map集合
           */
          @RequestMapping("/jsonZHMap")
          public   @ResponseBody Map toJsontoMap(){
              String json = "{\"student1\":{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10003,\"name\":\"小西\"},\"student2\":{\"age\":22,\"birthday\":\"2022-03-19\",\"email\":\"2409956979@qq.com\",\"id\":10001,\"name\":\"小米\"}}";
              //fastJson类的静态方法parseObject
              //传递要反序列化的json字符串,Map集合没有泛型,没有泛型是不安全的集合
              //转换后的集合,必须要有泛型
              //Map student = JSON.parseObject(json);
              //调用parseObject传递参数,TypeReference<>类型,TypeReference类的泛型中,传递转换后的Map集合
              //new TypeReference<Map<String, Student>>() { }   匿名内部类
              Map<String, Student> stringStudentMap = JSON.parseObject(json, new TypeReference<Map<String, Student>>() {
              });
              return  stringStudentMap;
          }
      复制代码

SerializerFeature枚举

该枚举支持序列化为null的字段

  • 枚举常量WriteMapNullValue序列化为null的字段

复制代码
    @Test
    public void testWriteMapNullValue(){
        Student student = new Student();
        student.setAge(22);
        student.setBirthday(cshDate());
​
        student.setId(10001);
        student.setName("小米");
//        student.setEmail("2409956979@qq.com");
        //方法的参数上,添加枚举类型,未赋值的就为null
        String s = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);
        System.out.println(s);
​
    }
​
复制代码
  • 枚举常量WriteNullStringAsEmpty字段为null,序列化为“”(空字符)

复制代码
   @Test
    public void testWriteNullStringAsEmpty(){
        Student student = new Student();
        student.setAge(22);
        student.setBirthday(cshDate());
​
        student.setId(10001);
        student.setName("小米");
//        student.setEmail("2409956979@qq.com");
        //方法的参数上,添加枚举类型,未赋值的就为null
        String s = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty);
        System.out.println(s);
​
    }
复制代码
  • 枚举常量WriteNullNumberAsZero字段为null,序列化为0,(字段类型为int、Integer )

复制代码
    /**
     * WriteNullNumberAsZero 当字段为null时,序列化为0
     */
    @Test
    public void WriteNullNumberAsZero(){
        Student student = new Student();
//        student.setAge(22);
        student.setBirthday(cshDate());
​
        student.setId(10001);
        student.setName("小米");
        student.setEmail("2409956979@qq.com");
        //方法的参数上,添加枚举类型,未赋值的就为null
        String s = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero);
        System.out.println(s);
​
    }
复制代码
  • 枚举常量WriteNullBooleanAsFalse字段为null,输出false,(字段类型为Boolean)

  • 枚举常量WriteDateUseDateFormat格式化日期格式,(字段类型为Date)

  • 枚举常量PrettyFormat格式化输出

 

 

 

 

 

 

作者:旧歌
链接:https://www.cnblogs.com/wdyjt/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利

posted @   旧歌  阅读(576)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示