我的学习之路-JSON初体验

本文介绍了JSON的基本概念、用途和语法,通过实例展示了如何创建和使用JSON对象,以及在Web项目中与JavaScript的交互。文中提到了Fastjson作为Java的JSON工具包,用于对象与JSON字符串的转换,并提供了简单的使用示例。
摘要由CSDN通过智能技术生成

JSON学习

最近学习中了解到一个新的内容:JSON,学习之后有了一点小的概念,写下这篇博客,帮自己加深理解。纯属自己个人的理解,如果有错,希望大家及时指出,多多包涵。


首先,我们要了解一样东西,要知道它是什么,用来干嘛的。

什么是JSON

以下是JSON的官方介绍:
来自JSON中文网:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。
它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。
JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

JSON基于两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的编程语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

值的有序列表(An ordered list of values)。在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)。

通俗地讲,它就是一种数据的表达方式,我们用这样一种格式来将我们的数据表达出来。

JSON用来做什么?

通常呢,JSON用于服务器和客户端的数据交换。

JSON的语法

  • JSON数据由 键(key)/ 值(value) 来描述,并且用逗号 , 来分割。
  • 一个大括号代表一个完整的对象,拥有多个键值对。
  • 中括号用来保存数组,数组内多个对象之间用逗号分割。
var json = {
               "class1":[
                    {"name":"张三","id":"2021111"},
                    {"name":"李四","id":"2021222"},
                    {"name":"王五","id":"2021333"}
                ]
            }

这里面 class1 是一个键,它的值是后面的中括号保存的数组。
数组内有3个对象,也都是键值对的形式。
为了规范,避免出错,键和值都要用双引号。
JSON文件中不要加注释,会报错。
这里有JSON中文网提供的在线编辑工具,可以自行尝试。

尝试一下

1.我们新建一个web项目。

我用的是Intellij IDEA,个人感觉比eclipse好用,用户体验贼佳。
具体操作我就不贴了。新建项目

2.创建一个json文件,后缀要是.json。

这里大括号内是一个完整的对象,对象与对象间保存的数据可以不同。我们给张三一个班长职务。
json文件

3.创建好之后我们就要使用它。

JSON原名 JavaScript Object Notation 。下面我们就用javaScript来操作它。创建一个html文件,编写javaScript代码。

<!DOCTYPE html>
<html>
<head>
    <title>JSON</title>
    <meta charset="utf-8">
<!--    引入jquery文件来处理json-->
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
    <script>
        $.ajax({
            type:"get",
            url: "class.json",
            dataType:"json",
            success:function(data) {
                //将json对象转换为字符串
                $("#json").html(JSON.stringify(data));
                //遍历data,输出json
                $.each(data,function(index,obj){
                    let job =function (){
                        if(obj["job"]!=null){
                            return "<p>职务:" + obj["job"] + "</p>";
                        }else
                            return "";
                    };
                    $("#json1").append(
                        "<p>姓名:" + obj["name"] + "</p>" +
                        "<p>id:" + obj["id"] +"</p>" +
                        job()
                    );
                })
            },
            error:function() {
                alert("请求失败");
            }
        });
    </script>
</head>

<body>
    <h1>JSONTest</h1>
    <p id="json"></p>
    <div id="json1"></div>
</body>
</html>

结果:
结果 上面我们用了 JSON.stringify() 将json对象转化为字符串,那么相对应的,也有 JSON.parse 将字符串转化为json对象。
注意:定义字符串时,要用 \ 转义,不然会冲突,比如:

var class="{\"name\":\"张三\"}";

json本身是一个对象,除了最上面直接定义初始化的方法之外,我们还可以以对象的方式对其初始化,比如:

var class1={};
class1.name="张三";
class1.id="2021111";
//数组
var teacher={};
teacher.name="李老师";
teacher.id="2021777";
var school={};
school.name="理工";
school.id="555";
var dep=[teacher,school];

JSON交互

上面我们说JSON是用于数据存储与传输的一种格式,常用于服务器与客户端的数据交互,下面我们就来讲讲JSON与JAVA。
我们说JSON一开始是为javascript设计使用的,后来发现,这东西很好用,渐渐地,其他语言也开始使用JSON。于是,java工程师便开发了java的JSON工具包,用与JSON与java对象的相互转换。

Fastjson

Fastjson是比较常用的json工具,其他还有Gson等。

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

引入jar包或者注入依赖就能使用:
jar包:https://github.com/alibaba/fastjson/releases
Maven:

<dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.76</version>
</dependency>

Fastjson尝试

1.在项目上新建一个实体类。
public class student {
    private int id;
    @JSONField(name="姓名")
    private String sname;
    @JSONField(name="职务")
    private String job;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }
}

上面实体类中有一个注解 **@JSONField(name=“姓名”)**注解是啥我就不说了,通过注解,能极大的方便我们对json对象的操作,除了上面这个,还有其他注解,大家自行了解。
@JSONField(name=“xx”) 这个注解能修改得到的json对应键的名字。比如上例,如不加注解,得到的结果为

{“id”:2021111,“job”:“班长”,“sname”:“张三”}

加上注解后:

{“id”:2021111,“姓名”:“张三”,“职务”:“班长”}

sname 被改成了 姓名job 被改成了 职务
这里姓名和职务两个键的位置调换了是因为fastjson封装json时会默认按属性名称由a到z排序

2.接着创建测试类
import com.alibaba.fastjson.JSON;

public class test1 {
    public static void main(String[] args) {
//        初始化,因为之前没创建构造方法,所以一个一个添加
        student s = new student();
        s.setId(2021111);
        s.setSname("张三");
        s.setJob("班长");

//      fastjson中提供了JSON对象来完成对象与字符串的转换
//        java对象转json
        String json = JSON.toJSONString(s);
        System.out.println(json);
//        json转java对象
        student stu = JSON.parseObject(json,student.class);
        System.out.println(stu.getSname());
    }
}

结果:
fastjson结果

Fastjson 数组对象

上面我们转换的是单个对象,下面来看数组。

1.新建测试类
public class test2 {
    public static void main(String[] args) {
//        一个班50人,职务就不设了
        List class1 = new ArrayList();
        for(int i = 1;i<=50;i++){
            student stu = new student();
            stu.setId(2021 + i);
            stu.setSname("学生" + i);
            class1.add(stu);
        }
//        转换,还是用这个方法
        String json = JSON.toJSONString(class1);
        System.out.println(json);
        //        json转集合
        List<student> students = JSON.parseArray(json, student.class);
        for(student s : students){
            System.out.print(s.getSname() + " ");
        }
    }
}

结果太长了,不贴了。

json工具包可以把对象以及对象的集合转换为字符串的形式,常用于Ajax。

共勉,希望每个人的努力都能得到回报。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值