JSON(全称JavaScript Object Notation)详解

本文介绍了JSON(JavaScript Object Notation)的基本概念、作用和语法规则,包括键值对、数组、对象等,并详细讲解了如何利用Jackson和fastJson进行JSON对象与Java对象之间的转换操作。

JSON简介

        Json的全称为:JavaScript Object Notation,是一种轻量级的数据交互格式。它基于 ECMAScript (欧洲计算机协会制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。Json作为一种理想的数据交互语言,用于客户端和服务器的数据交互。

JSON就是一串字符串,只不过元素会使用特定的符号标注。

Json格式数据 实际上是JS对象演化而来的{"key":value,"key2":value2...}。

Json数据由 键值对(key:value)组成,键一定是字符串(string)类型,值是任意类型。

JSON 作用

        是一种轻量级的数据交换格式,是一种理想的数据交换语言,用于客户端和服务器的数据交互,易于人阅读和编写,也易于机器的解析和生成,同时可以提高网络传输速率

JSON 的语法规则:JSON 语法是 JavaScript 语法的子集

1、 数组(Array)用方括号("[]")表示。

2、对象(Object)用大括号("{}")表示。

3、 名称/值对(name/value)之间用冒号(":")隔开。

4、 名称(name)置于双引号中(不能用单引号,也不能没有引号),值(value)有:字符串(string)、数值(number)、布尔值(bool:true或false)、null、对象(object)和 数组(array)。

5、 并列的数据之间用逗号(",")分隔,注意两点:

        1)- 使用英文的逗号(","),不要用中文的逗号(",")

   2)- 最后一个“名称/值对“之后不要加逗号

JSON格式数据定义与解析

1.Json对象
            {"key1":value1,"key2":value2}
            解析:Json对象.key
2.Json数组
            [{},{},{}]
            解析:Json数组[索引]
3.混合形式
            Json对象和Json数组的相互嵌套
            解析:剥洋葱方式 从外到内一层层解析

JSON转换工具:将 Json对象 和 Java对象 互相转换

JacksonSpringMVC内置的转换工具 无需依赖外部Jar包,直接在JDK上运行大数据量Json转换速度快,对于复杂数据类型转换没有问题
fastJsonAlibaba提供的转换工具(阿里巴巴)转换速度更快,复杂数据类型偶尔转换会出现bug
gsongoogle提供的转换工具(谷歌)移动和安卓方面用的比较多

Jackson

java对象转json
                1.导入jar包
                2.创建ObjectMapper对象
                3.调用writeValueAsString(Object obj)方法
json转java对象
                1.导入jar包
                2.创建ObjectMapper对象
                3.调用readValue(String json,Class clazz)方法

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.bean.User;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/*
    使用Jackson转换工具完成Java对象和Json数据的转换
    1.导入jar包
    2.创建核心对象 ObjectMapper
    3.调用方法完成操作
 */
public class JacksonTest {

    //1.将java对象转为json数据
    // {"id":1,"username":"zs","password":"123","email":"zs@qq.com","phone":"13112345678"}
    @Test
    public void method01() throws JsonProcessingException {
        //0.准备一个java对象
        User user = new User(1, "zs", "123", "zs@qq.com", "13112345678");
        //1.创建ObjectMapper对象
        ObjectMapper om = new ObjectMapper();
        //2.调用writeValueAsString方法将java对象转为json数据
        String json = om.writeValueAsString(user);
        System.out.println("json = " + json);
    }


    //2.将list集合转为json list集合转为json转的是json数组
    // [{"id":1,"username":"zs","password":"123","email":"zs@qq.com","phone":"13112345678"},{"id":2,"username":"ls","password":"123","email":"zs@qq.com","phone":"13112345678"},{"id":3,"username":"ww","password":"123","email":"zs@qq.com","phone":"13112345678"}]
    @Test
    public void method02() throws JsonProcessingException {
        //0.准备一个list集合
        User user1 = new User(1, "zs", "123", "zs@qq.com", "13112345678");
        User user2 = new User(2, "ls", "123", "zs@qq.com", "13112345678");
        User user3 = new User(3, "ww", "123", "zs@qq.com", "13112345678");

        List<User> list = new ArrayList<>();
        list.add(user1);
        list.add(user2);
        list.add(user3);

        System.out.println("list = " + list);

        //1.创建ObjectMapper对象
        ObjectMapper om = new ObjectMapper();
        //2.调用writeValueAsString方法将list集合转为json数据
        String json = om.writeValueAsString(list);
        System.out.println("json = " + json);
    }

    //3.将map集合转为json  转的是混合形式
    // {"flag":true,"data":[{"id":1,"username":"zs","password":"123","email":"zs@qq.com","phone":"13112345678"},{"id":2,"username":"ls","password":"123","email":"zs@qq.com","phone":"13112345678"},{"id":3,"username":"ww","password":"123","email":"zs@qq.com","phone":"13112345678"}],"message":"查询成功"}
    @Test
    public void method03() throws JsonProcessingException {
        //0.准备一个map集合
        User user1 = new User(1, "zs", "123", "zs@qq.com", "13112345678");
        User user2 = new User(2, "ls", "123", "zs@qq.com", "13112345678");
        User user3 = new User(3, "ww", "123", "zs@qq.com", "13112345678");

        List<User> list = new ArrayList<>();
        list.add(user1);
        list.add(user2);
        list.add(user3);

        Map<String,Object> map = new HashMap<>();
        map.put("flag",true);
        map.put("message","查询成功");
        map.put("data",list);

        //1.创建ObjectMapper对象
        ObjectMapper om = new ObjectMapper();
        //2.调用writeValueAsString方法将map集合转为json数据
        String json = om.writeValueAsString(map);
        System.out.println("json = " + json);
    }

    //4.将json数据转为java对象
    @Test
    public void method04() throws IOException {
        //0.准备一个json数据
        String json = "{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}";
        //1.创建 ObjectMapper对象
        ObjectMapper om = new ObjectMapper();
        //2.调用readValue方法将json数据转为java对象
        User user = om.readValue(json, User.class);
        System.out.println("user = " + user);
    }

    //5.将json数据转为list集合
    @Test
    public void method05() throws IOException {
        //0.准备一个json数据
        String json = "[{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":2,\"username\":\"ls\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":3,\"username\":\"ww\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}]";
        //1.创建 ObjectMapper对象
        ObjectMapper om = new ObjectMapper();
        //2.调用readValue方法将json数据转为list集合
        List list = om.readValue(json, List.class);
        System.out.println("list = " + list);

        //如果不想list集合泛型丢失 可以使用TypeReference指定要转换的复杂类型
        //jackson里面的TypeReference类 是抽象类,且构造方法使用protected修饰 所以在创建对象时,需要使用匿名内部类
        TypeReference<List<User>> reference = new TypeReference<List<User>>() {};
        List<User> list2 = om.readValue(json, reference);
        System.out.println("list2 = " + list2);
    }

    //6.将json数据转为map集合
    @Test
    public void method06() throws IOException {
        //0.准备一个json数据
        String json = "{\"flag\":true,\"data\":[{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":2,\"username\":\"ls\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":3,\"username\":\"ww\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}],\"message\":\"查询成功\"}";
        //1.创建 ObjectMapper对象
        ObjectMapper om = new ObjectMapper();
        //2.调用readValue方法将json数据转为map集合
        Map map = om.readValue(json, Map.class);
        System.out.println("map = " + map);
    }
}

fastJson

1.导入jar包
java对象转json:JSON.toJSONString(Object obj);
json转java对象:JSON.parseObject(String json,Class  clazz);

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.bean.User;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/*
    使用fastjson转换工具完成Java对象和Json数据的转换
    1.导入jar包
    2.1:java对象转json:JSON.toJSONString(Object obj);
    2.2:json转java对象:JSON.parseObject(String json,Class clazz);
 */
public class FastjsonTest {

    //1.将java对象转为json数据
    // {"email":"zs@qq.com","id":1,"password":"123","phone":"13112345678","username":"zs"}
    @Test
    public void method01(){
        //1.准备一个java对象
        User user = new User(1, "zs", "123", "zs@qq.com", "13112345678");
        //2.调用JSON.toJSONString方法
        String json = JSON.toJSONString(user);
        System.out.println("json = " + json);
    }


    //2.将list集合转为json list集合转为json转的是json数组
    // [{"email":"zs@qq.com","id":1,"password":"123","phone":"13112345678","username":"zs"},{"email":"zs@qq.com","id":2,"password":"123","phone":"13112345678","username":"ls"},{"email":"zs@qq.com","id":3,"password":"123","phone":"13112345678","username":"ww"}]
    @Test
    public void method02() {
        //1.准备一个list集合
        User user1 = new User(1, "zs", "123", "zs@qq.com", "13112345678");
        User user2 = new User(2, "ls", "123", "zs@qq.com", "13112345678");
        User user3 = new User(3, "ww", "123", "zs@qq.com", "13112345678");

        List<User> list = new ArrayList<>();
        list.add(user1);
        list.add(user2);
        list.add(user3);

        //2.调用JSON.toJSONString方法
        String json = JSON.toJSONString(list);
        System.out.println("json = " + json);
    }

    //3.将map集合转为json  转的是混合形式
    // {"flag":true,"data":[{"email":"zs@qq.com","id":1,"password":"123","phone":"13112345678","username":"zs"},{"email":"zs@qq.com","id":2,"password":"123","phone":"13112345678","username":"ls"},{"email":"zs@qq.com","id":3,"password":"123","phone":"13112345678","username":"ww"}],"message":"查询成功"}
    @Test
    public void method03(){
        //1.准备一个map集合
        User user1 = new User(1, "zs", "123", "zs@qq.com", "13112345678");
        User user2 = new User(2, "ls", "123", "zs@qq.com", "13112345678");
        User user3 = new User(3, "ww", "123", "zs@qq.com", "13112345678");

        List<User> list = new ArrayList<>();
        list.add(user1);
        list.add(user2);
        list.add(user3);

        Map<String,Object> map = new HashMap<>();
        map.put("flag",true);
        map.put("message","查询成功");
        map.put("data",list);

       //2.调用JSON.toJSONString方法
        String json = JSON.toJSONString(map);
        System.out.println("json = " + json);
    }

    //4.将json数据转为java对象
    @Test
    public void method04() {
        //1.准备一个json数据
        String json = "{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}";
        //2.调用JSON.parseObject(String json,Class clazz)方法
        User user = JSON.parseObject(json, User.class);
        System.out.println("user = " + user);
    }

    //5.将json数据转为list集合
    @Test
    public void method05(){
        //1.准备一个json数据 【json数组】
        String json = "[{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":2,\"username\":\"ls\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":3,\"username\":\"ww\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}]";
        //2.调用方法
        List list1 = JSON.parseObject(json, List.class);
        System.out.println("list1 = " + list1);

        //避免泛型丢失 完成复杂数据类型转换  可以使用TypeReference指定要转换的类型
        //由于fastjson里面的TypeReference类是普通类,但是构造方式使用protected修饰 因此创建对象时需要使用匿名内部类
        TypeReference<List<User>> reference = new TypeReference<List<User>>(){};
        List<User> list2 = JSON.parseObject(json, reference);
        System.out.println("list2 = " + list2);

        //方式三:直接将json转成Object类型
        Object parse = JSON.parse(json);
        System.out.println("parse = " + parse);

    }

    //6.将json数据转为map集合
    @Test
    public void method06(){
        //0.准备一个json数据
        String json = "{\"flag\":true,\"data\":[{\"id\":1,\"username\":\"zs\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":2,\"username\":\"ls\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"},{\"id\":3,\"username\":\"ww\",\"password\":\"123\",\"email\":\"zs@qq.com\",\"phone\":\"13112345678\"}],\"message\":\"查询成功\"}";
        //1.调用方法
        Map map = JSON.parseObject(json, Map.class);
        System.out.println("map = " + map);
    }
}

JsonUtils 工具类

import com.alibaba.fastjson.JSON;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class JsonUtils {


    /**
     * 响应结果
     * @param response
     * @param obj
     * @throws IOException
     */
    public static void printResult(HttpServletResponse response, Object obj) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        JSON.writeJSONString(response.getWriter(),obj);
    }

    /**
     * 把json转成对象
     * @param request
     * @param tClass
     * @param <T>
     * @return
     * @throws IOException
     */
    public static <T> T parseJSON2Object(HttpServletRequest request, Class<T> tClass) throws IOException{
        // 把表单数据之间转对象
        return JSON.parseObject(request.getInputStream(),tClass);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值