JavaWeb 速通JSON

目录

一、JSON快速入门

[1.基本介绍 :](#1.基本介绍 :)

[2.定义格式 :](#2.定义格式 :)

[3.入门案例 :](#3.入门案例 :)

二、JSON对象和字符串的相互转换

[1.常用方法 :](#1.常用方法 :)

[2.应用实例 :](#2.应用实例 :)

[3.使用细节 :](#3.使用细节 :)

三、JSON在Java中的使用

[1.基本说明 :](#1.基本说明 :)

[2.应用场景 :](#2.应用场景 :)

[2.1 JSON <---> JavaBean](#2.1 JSON <---> JavaBean)

[2.2 JSON <---> List](#2.2 JSON <---> List)

[2.3 JSON <---> Map](#2.3 JSON <---> Map)


一、JSON快速入门

1.基本介绍 :

(1) JSON全称"JavaScript Object Notation",即JavaScript对象表示法。

(2)JSON是轻量级的文本数据交换格式,使用广泛;

**(3)**JSON独立于语言,即Java, PHP, asp.net等都可以使用JSON。

2.定义格式 :

JSON的定义格式与JS中通过{}定义对象的格式类似,注意JSON中的key要加双引号"",value可以是string, number, object, array, true, false, null类型。具体如下------

var 变量名 = {

"key1" : value,

"key2" : value,

"key3" : \[\], //JSON数组

"key4" : {}, //JSON可以在对象中嵌套定义对象

"key5" : {}, {}, {} //JSON对象数组(不限制类型弱)

}

3.入门案例 :

intro.html代码如下 :

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Json introduction</title>
</head>
    <script type="text/javascript">
        window.onload = function () {
            //定义一个JSON对象
            var student = {
                "name" : "Cyan",
                "age" : 21,
                "gender" : "male",
                "hobby" : ["basketball", "writing", "chess"],
                "goals" : [{"kyrie" : "irving"}, {"Cyan" : "RA9"}, 141, 450]
            }

            //取出JSON对象中的值(加号+ 仅取出值)
            console.log("name = ", student.name);
            console.log("name = " + student.name);

            console.log("hobby = ", student.hobby);
            for (var i = 0; i < student.hobby.length; ++i) {
                console.log("The no.%i hobby = ", (i + 1), student.hobby[i]);
            }

            console.log("goals = " + student.goals)
            console.log("goals = ", student.goals)
            console.log("score of goals = ", student.goals[3])
            console.log("Cyan of obj of goals = ", student.goals[1].Cyan)
        }
    </script>
<body bgcolor="#e0ffff">
    <h2 style="color: pink">请查看控制台打印出的信息捏~</h2>
</body>
</html>

运行效果 :


二、JSON对象和字符串的相互转换

1.常用方法 :

(1) JSON.stringify(json)------将一个JSON对象转换为一个json字符串。

(2) JSON.parse(jsonString)------将一个json字符串转换成一个JSON对象。

PS :****JSON是一个JS内置对象(built-in)。如下图所示 :

2.应用实例 :

string_json.html代码如下 :

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>string_json</title>
    <script type="text/javascript">
        //加载页面
        window.onload = function() {
            console.log("=================== JSON --> String ===================")
            //定义一个JSON对象
            var jsonCyan = {
                "name" : "Cyan",
                "token" : "RA9"
            }
            console.log("jsonCyan = ", jsonCyan);
            console.log("jsonCyan's type = ", typeof(jsonCyan));

            //将JSON对象转换为String类型
            var strCyan = JSON.stringify(jsonCyan);
            console.log("strCyan = ", strCyan)
            console.log("strCyan's type = ", typeof(strCyan));

            console.log("\n=================== String --> JSON ===================")
            var strFive = "{\"name\":\"Five\",\"token\":\"5\"}";
            var jsonFive = JSON.parse(strFive);
            console.log("strFive = ", strFive)
            console.log("jsonFive = ", jsonFive)
        }
    </script>
</head>
<body>
</body>
</html>

运行结果 :

3.使用细节 :

(1) JSON.stringify(json)方法不会影响原来的json对象;JSON.parse(string)方法也不会影响原来的string。

(2)**定义JSON对象时,属性既可以使用双引号"",也可以使用单引号'' ;但是当通过parse方法将原生字符串转成JSON对象时,要求属性必须使用双引号""**,否则会一直报错。

**(3)**JSON.stringify(json)方法得到的字符串,默认就是双引号""表示的字符串,在语法格式正确的情况下,可以直接重新转换成JSON对象。


三、JSON在Java中的使用

1.基本说明 :

Java中使用JSON,需要引入第三方jar包------gson.jar。该jar包是由Google公司提供的用于在Java对象和JSON数据之间进行映射的Java类库。gson.jar可以对JSON字符串和Java对象进行相互转换。

导入gson.jar如下 :

2.应用场景 :

2.1 JSON <---> JavaBean

定义一个JavaBean学生类,Student类代码如下 :

java 复制代码
package javabean;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
public class Student {
    private String name;
    private double scores;

    public Student() {
    }
    public Student(String name, double scores) {
        this.name = name;
        this.scores = scores;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScores() {
        return scores;
    }

    public void setScores(double scores) {
        this.scores = scores;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", scores=" + scores +
                '}';
    }
}

JavaJSON类代码如下 :

java 复制代码
package javaObject;

import com.google.gson.Gson;
import javabean.Student;

public class JavaJSON {
    public static void main(String[] args) {
        //首先创建一个Gson对象
        Gson gson = new Gson();

        Student cyan = new Student("Cyan", 450.0);

        //利用Gson对象的toJson方法,将JavaBean --> JSON字符串
        String strCyan = gson.toJson(cyan);
        System.out.println("strCyan = " + strCyan);

        //利用Gson对象的fromJson方法,将JSON字符串 --> JavaBean对象
            //需要传入一个符合JSON格式的字符串,以及JavaBean类的Class对象
            //底层用到了反射机制
        Student student = gson.fromJson(strCyan, Student.class);
        System.out.println("student = " + student);
    }
}

运行结果 :

2.2 JSON <---> List

JavaJSON2类代码如下 :

java 复制代码
package javaObject;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import javabean.Student;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class JavaJSON2 {
    public static void main(String[] args) {
        Gson gson = new Gson();

        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("Cyan", 450));
        studentList.add(new Student("Five", 456));

        //List --> Json字符串
        String strList = gson.toJson(studentList);
        System.out.println("strList = " + strList);

        //Json字符串 --> List
        Type type = new TypeToken<List<Student>>() {}.getType();
        System.out.println("\ntype = " + type);
        System.out.println("type's type = " + type.getClass());
        List<Student> students = gson.fromJson(strList, type);
            /*
                (1) 由于TypeToken的无参构造器使用protected访问修饰符修饰,
                    因此无法直接在别包下直接调用该无参构造。
                (2) 解决之道------------借助匿名内部类,匿名内部类有自己隐式的无参构造,
                    而该无参构造中又默认隐含super关键字,借此调用TypeToken的无参构造。
                (3) TypeToken无参构造器底层用到了反射机制(拿到了类的正名)。
             */
        System.out.println("\nstudents = " + students);
    }
}

运行结果 :

2.3 JSON <---> Map

JavaJSON3类代码如下 :

java 复制代码
package javaObject;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import javabean.Student;

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

/**
 * @author : Cyan_RA9
 * @version : 21.0
 */
public class JavaJSON3 {
    public static void main(String[] args) {
        Gson gson = new Gson();

        Map<Integer, Student> studentMap = new HashMap<>();
        studentMap.put(1, new Student("Cyan", 450));
        studentMap.put(2, new Student("Rain", 445));

        //Map --> JSON字符串
        String strMap = gson.toJson(studentMap);
        System.out.println("strMap = " + strMap);

        //JSON字符串 --> Map
        Type type = new TypeToken<Map<Integer, Student>>() {}.getType();
        Map<Integer, Student> students = gson.fromJson(strMap, type);
        System.out.println("students = " + students);
    }
}

运行结果 :

System.out.println("END-------------------------------------------------------------");

相关推荐
念越4 小时前
初中语数英答题与竞赛平台
java·数据库·spring boot
独立开发者阿乐4 小时前
结构化数据 JSON-LD 实战:让 AI 读懂你的网页
人工智能·json·结构化数据·geo优化·json-ld·ai收录·faqpage
晴天小庭4 小时前
Sael——基于Jev的AI中转站的安全风控网关,现已开源
人工智能·后端·react.js
知守观4 小时前
一个半天需求干了三天:代码腐化的五个信号与自查命令
java·后端·代码规范
过客123454 小时前
从"发现"到"处置":一个无人值守 AI 闭环的完整拆解(85 天真实数据)
后端·agent·ai编程
黎燃4 小时前
我搭了个“大模型辩论赛“:让 DeepSeek、Qwen、GLM 在蓝耘上吵了一架
后端
墨家句子5 小时前
服务器被反复尝试登录之后:fail2ban 加密钥登录的五道加固
linux·后端
炸鸡叔5 小时前
我做了 BotBus:从手机续聊本地 Agent,查看文件和终端
前端·后端
漂不动5 小时前
告别上下文爆炸:基于 Milvus-Lite 与渐进式披露的动态 Agent 工具挂载实践
后端
代码山河5 小时前
Java学习路线图:2026年最新版,从入门到架构师
java·学习·架构·教程·面向对象·项目