JSON简述及JSON与Java之间的转换

JSON简述及JSON与Java之间的转换

JSON(JavaScript Object Notation) JavaScript对象表示法(JSON源于JS)。

JSON的特点:
JSON 是一种轻量级的数据交换格式。
JSON采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。
JSON易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

XML与JSON的区别

XML : 可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。
JSON: (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
相同点:
它们都可以作为一种数据交换格式。
二者区别:
XML是重量级的,JSON是轻量级的,XML在传输过程中比较占带宽,JSON占带宽少,易于压缩。
XML和json都用在项目交互下,XML多用于做配置文件,JSON用于数据交互
JSON独立于编程语言存在,任何编程语言都可以去解析json

JSON语法格式

{
	"name":"tom",
	"sex":"女",
	"age":12
}

语法注意:

  1. 外面由{}括起来

  2. 数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)

  3. 每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号

  4. 参数值如果是string类型,就必须加引号,如果是数字类型,引号可加可不加

    遵守上面4点,便可以形成一个json对象。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script typet="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>

    <script>
        //自定义JSON格式
        var person = {"name":"tom","sex":"女","age":12};
        console.log(person);

        //数组格式JSON
        var persons = {"person":[{"name":"tom","sex":"女","age":12},{"name":"jack","sex":"男","age":23}]};
        console.log(persons);

        //集合格式JSON
        var list = [{"name":"tom","sex":"女","age":12},{"name":"jack","sex":"男","age":23}];
        console.log(list);

    </script>

</head>
<body>

</body>
</html>

JSON数据的转换

目前, 前后端的ajax通讯几乎用的都是json格式的了,所以在开发的过程中,我们经常会涉及到JSON数据的转换

在这里插入图片描述

FastJson介绍

在Maven项目中使用FastJson库,需要提前在Maven的配置文件中添加此FastJson包的依赖

		<!--fastjson工具包 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.colobu</groupId>
            <artifactId>fastjson-jaxrs-json-provider</artifactId>
            <version>0.3.1</version>
        </dependency>

将 Java 对象转换为 JSON 格式

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {

    /**
     * 通过 @JSONField 我们可以自定义字段的名称进行输出,并控制字段的排序,还可以进行序列化标记
     * @JSONField注解
     *     可以通过name指定输出名称
     *     ordinal属性指定字段顺序
     *     serialize值为false时,字段将不会序列化
     */
    @JSONField(name = "USERNAME",ordinal = 0)
    private String userName;

    @JSONField(name = "AGE",ordinal = 1)
    private int age;

    @JSONField(serialize = false)
    private String birthday;
}

此处注解是因为IDEA添加了lombok插件,减少了代码冗余

public class TestFastjson {

    /**
     * Java对象转换为JSON
     */
    @Test
    public void javaBeanToJSON(){
        Person person = new Person("小四",25, DateUtils.getDateFormart());
        String jsonString = JSON.toJSONString(person);
        System.out.println(jsonString);
    }

    /**
     * Java中集合转化为JSON
     */
    @Test
    public void javaListToJSON(){
        Person person1 = new Person("小四",25, DateUtils.getDateFormart());
        Person person2 = new Person("小四",25, DateUtils.getDateFormart());
        Person person3 = new Person("小四",25, DateUtils.getDateFormart());
        List<Person> personList = new ArrayList<>();
        //将对象封装进集合
        Collections.addAll(personList,person1,person2,person3);
        String jsonListString = JSON.toJSONString(personList);
        System.out.println(jsonListString);
    }

    /**
     * JSON转JavaBean
     * JSON.parseObject()
     *      可以使用 JSON.parseObject() 将 JSON 字符串转换为 Java 对象。
     *      注意反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常
     */
    @Test
    public void JSONToJavaBean(){
        String json = "{\"USERNAME\":\"小四\",\"AGE\":25}";
        Person person = JSON.parseObject(json, Person.class);
        System.out.println(person.toString());
    }

    /**
     * JSON转集合
     * JSON.parseArray()
     *      可以使用 JSON.parseArray() 将 JSON 字符串转换为 集合对象。
     */
    @Test
    public void JSONToJavaList(){
        String json = "[{\"USERNAME\":\"小四\",\"AGE\":25},{\"USERNAME\":\"小四\",\"AGE\":25},{\"USERNAME\":\"小四\",\"AGE\":25}]";
        List<Person> personList = JSON.parseArray(json, Person.class);
        personList.forEach(item -> System.out.println(item.toString()));
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值