fastjson对json的处理

什么是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提供了许多方法(多态)实现序列化。
    这里写图片描述
    • 基本的序列化
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可以直接对日期类型格式化,在缺省的情况下,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=[太原, 大同]}
  • 反序列化
    这里写图片描述
//集合反序列化
        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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值