欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

fastjson对json的处理

程序员文章站 2022-03-26 21:46:52
...

什么是JSON?

  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和
    JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
  • JSON 具有自我描述性,更易理解

与xml的异同之处

  • 相同之处
    • JSON是纯文本
    • JSON具有“自我描述性“(人类可读)
    • JSON具有层级结构
    • JSON可通过JavaScript进行解析
    • JSON数据可使用AJAX进行传输
  • 不同之处
    • 没有结束标签
    • 更短
    • 读写速度更快
    • 能够使用内建的JavaScript eval()方法进行解析
    • 使用数组
    • 不适用保留字

JSON语法

  • JSON语法规则
    • 数据在名称/值对中
    • 数据由逗号分隔
    • 数据由逗号分隔
    • 大括号保存对象
    • 中括号保存数组
  • JSON名称/值对
    JSON 数据的书写格式是:名称/值对。
    名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"name" : "阿狗"

JSON值

可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true或false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

FastJSON的基本使用

  • 序列化
    序列化是指把JavaBean对象转化成json格式的字符串
    com.alibaba.fastjson.JSON提供了许多方法(多态)实现序列化。
    fastjson对json的处理
    • 基本的序列化
import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FastJSONTest {
    public static void main(String[] args) {
        //将map转成JSON对象
        Map<String,Object> map1 = new HashMap<String, Object>();
        map1.put("k1","one");
        map1.put("k2","two");
        String mapJson = JSON.toJSONString(map1);
        System.out.println(mapJson);

        //将list转成JSON对象
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        Map<String,Object> map2 = new HashMap<String, Object>();
        map2.put("k1","Three");
        map2.put("k2","Four");
        list.add(map1);
        list.add(map2);
        String listJson = JSON.toJSONString(list);
        System.out.println(listJson);

        //自定义JavaBean转成JSON
        Shengshi sshi =new Shengshi();
        sshi.setName("山西");
        ArrayList<String> cities = new ArrayList<String>();
        cities.add("太原");
        cities.add("大同");
        sshi.setCities(cities);

        String sshiJson = JSON.toJSONString(sshi);
        System.out.println(sshiJson);

        //输出格式化后的JSON字符串
        //传入一个对象和一个布尔类型(是否格式化),将对象转成格式化后的JSON字符串。
        String listJsonFormat = JSON.toJSONString(list,true);
        System.out.println(listJsonFormat);
    }
}

结果:

{"k1":"one","k2":"two"}
[{"k1":"one","k2":"two"},{"k1":"Three","k2":"Four"}]
{"cities":["太原","大同"],"name":"山西"}
[
    {
        "k1":"one",
        "k2":"two"
    },
    {
        "k1":"Three",
        "k2":"Four"
    }
]
  • FastJson还提供许多特性支持
String objJson = JSON.toJSONString(Object object, SerializerFeature... features) 

传入一个对象和SerializerFeature类型的可变变量。SerializerFeature是一个枚举。

com.alibaba.fastjson.serializer.SerializerFeature
fastjson对json的处理

        //日期格式化
        //FastJSON可以直接对日期类型格式化,在缺省的情况下,FastJSON会将Date转成long。
        String dateJson1 = JSON.toJSONString(new Date());
        System.out.println(dateJson1);

        //使用SerializerFeature特性格式化日期。
        String dateJson2 = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);
        System.out.println(dateJson2);

        //指定输出日期格式
        String dateJson3 = JSON.toJSONStringWithDateFormat(new Date(),"yyyy-MM-dd HH:mm:ss");
        System.out.println(dateJson3);

        //使用单引号
        String listJson2 = JSON.toJSONString(list,SerializerFeature.UseSingleQuotes);
        System.out.println(listJson2);

        //JSON格式化
        String listJsonFormat1 = JSON.toJSONString(list,SerializerFeature.PrettyFormat);
        System.out.println(listJsonFormat1);

        //输出Null字段
        //缺省情况下FastJSON不输入为值Null的字段,可以使用SerializerFeature.WriteMapNullValue使其输出。
        Map<String,Object> map3 = new HashMap<String, Object>();
        String b=null;
        Integer i = 1;
        map3.put("a",b);
        map3.put("b",i);
        String listJson4 = JSON.toJSONString(map3,SerializerFeature.WriteMapNullValue);
        System.out.println(listJson4);

        //序列化要写入类型信息。
        Shengshi sshi1 =new Shengshi();
        sshi1.setName("山西");
        ArrayList<String> cities1 = new ArrayList<String>();
        cities1.add("太原");
        cities1.add("大同");
        sshi1.setCities(cities1);

        String sshiJson1 = JSON.toJSONString(sshi,SerializerFeature.WriteClassName,SerializerFeature.PrettyFormat);
        System.out.println(sshiJson1);

        //反序列化(由于序列化带了类型信息,使得反序列化时能够自动进行类型识别。)
        Shengshi sshi2 = (Shengshi)JSON.parse(sshiJson1);
        System.out.println(sshi2.toString());

结果:

1534257943343
"2018-08-14 22:45:43"
"2018-08-14 22:45:43"
[{'k1':'one','k2':'two'},{'k1':'Three','k2':'Four'}]
[
    {
        "k1":"one",
        "k2":"two"
    },
    {
        "k1":"Three",
        "k2":"Four"
    }
]
{"a":null,"b":1}
{
    "@type":"Shengshi",
    "cities":[
        "太原",
        "大同"
    ],
    "name":"山西"
}
Shengshi{name='山西', cities=[太原, 大同]}
  • 反序列化
    fastjson对json的处理
//集合反序列化
        List<Map> list1 = JSON.parseArray(listJson,Map.class);
        for (Map<String,Object>map:list1)
        {
            System.out.println(map.get("k1"));
            System.out.println(map.get("k2"));
        }
        //泛型的反序列化(使用TypeReference传入类型信息)。
        Map<String,Object> map4 = JSON.parseObject(mapJson,new TypeReference<Map<String,Object>>(){});
        System.out.println(map4.get("k1"));
        System.out.println(map4.get("k2"));

结果:

one
two
Three
Four
one
two
相关标签: json