JavaWeb 速通JSON

news2024/11/19 23:14:41

目录

一、JSON快速入门

        1.基本介绍 : 

        2.定义格式 : 

        3.入门案例 : 

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

        1.常用方法 : 

        2.应用实例 : 

        3.使用细节 : 

三、JSON在Java中的使用

        1.基本说明 : 

        2.应用场景 : 

            2.1 JSON <---> JavaBean

            2.2 JSON <---> List

            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代码如下 : 

<!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代码如下 : 

<!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类代码如下 : 

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类代码如下 : 

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类代码如下 : 

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类代码如下 : 

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-------------------------------------------------------------");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/945905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java对时间序列根据阈值进行连续性分片

问题描述&#xff1a;我需要对一个连续的时间戳list进行分片&#xff0c;分片规则是下一个数据比当前数据要大于某一个阈值则进行分片&#xff1b; 解决方式&#xff1a; 1、输入的有顺序的list &#xff0c;和需要进行分片的阈值 2、调用方法&#xff0c;填入该排序的list和阈…

非煤矿山风险监测预警算法 yolov8

非煤矿山风险监测预警算法通过yolov8网络模型深度学习算法框架&#xff0c;非煤矿山风险监测预警算法在煤矿关键地点安装摄像机等设备利用智能化视频识别技术&#xff0c;能够实时分析人员出入井口的情况&#xff0c;人数变化并检测作业状态。YOLO的结构非常简单&#xff0c;就…

element-ui el-upload组件 on-remove事件 传自定义参数

element-ui el-upload组件 on-remove事件 传自定义参数 1.vue页面 :on-remove"(file, fileList) > {handleRemove(file, fileList, item.order)}"2.methods方法里面

promethues监控postgres,emqx,redis

一、监控postgres 1、安装监控 docker pull wrouesnel/postgres_exporter2、执行 docker run -d -p 9187:9187 --name postgres_exporter --nethost -d -e DATA_SOURCE_NAME"postgresql://postgres:123456192.168.12.116:5432/rcc-manage?sslmodedisable" wroues…

移动隔断墙,高隔间将是一种十分理想的空间划分装饰

移动隔断墙&#xff0c;高隔间是一种非常理想的空间划分装饰方式。它可以根据需要随时移动和重新布置&#xff0c;提供灵活的空间解决方案。高隔间可以用于划分办公区域、会议室、展示区、休息区等不同功能的空间&#xff0c;使整个空间更加有序和高效。 高隔间的设计具有多样性…

context.WithCancel()的使用

“ WithCancel可以将一个Context包装为cancelCtx,并提供一个取消函数,调用这个取消函数,可以Cancel对应的Context Go语言context包-cancelCtx[1] 疑问 context.WithCancel()取消机制的理解[2] 父母5s钟后出门&#xff0c;倒计时&#xff0c;父母在时要学习&#xff0c;父母一走…

yo!这里是Linux进程入门介绍

目录 前言 os定位 进程基本介绍 进程基本操作 查看进程 创建进程 进程状态 理论层面 具体状态 进程优先级 环境变量 地址空间 进程地址空间&&页表介绍 深入理解地址空间 后记 前言 在了解学习过Linux环境下的基本操作以及工具之后&#xff0c;就来到了…

本地套接字通信

1.本地套接字 本地套接字的作用&#xff1a;本地的进程间通信 有关系的进程间的通信 没有关系的进程间的通信 本地套接字实现流程和网络套接字类似&#xff0c;一般采用TCP的通信流程 2.本地套接字通信的流程 - tcp // 服务器端 1.创建监听的套接字int lfd socket(AF_U…

聊聊中南亚跨境电商的机遇与前景

随着工业转移&#xff0c;中南亚地区作为一个充满潜力的区域&#xff0c;正逐渐成为跨境电商领域的热点。这一地区包括印度、孟加拉国、巴基斯坦、斯里兰卡等国家&#xff0c;拥有庞大的人口、不断增长的中产阶级&#xff0c;以及逐步完善的数字基础设施&#xff0c;为跨境电商…

Android投屏总结

#android手机投屏 ####导语 至于手机投屏的实现方法可谓五花八门&#xff0c;今天小袁就说下以开发人员的角度来说下当今手机的主流投屏方法。目前这种将终端信号经由WiFi传输到电视、电视盒的技术有三种&#xff1a;DLNA、AirPlay、Miracast、Google Cast。 ##手机投屏智能电…

for...in和for...of有什么区别

在JavaScript中遍历数组通常是使用for...i循环&#xff0c;在ES5具有遍历数组功能的还有forEach、map、filter、some、every、reduce、reduceRight等。 for...in和for...of是两种增强型循环&#xff0c;for...in是ES5标准&#xff0c;在ES6中新增了for...of的循环方式。 1.fo…

基于ADAU1452 DSP语音信号处理算法系统构建

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送音频&#xff0c;DSP音频项目核心开发资料 1 LMS, NLMS 最小均方自适应滤波算法 2 语音活动检测&#xff0c;去混响&#xff0c;波束形成算…

字符设备驱动读写操作实现

一、读操作实现 ssize_t xxx_read(struct file *filp, char __user *pbuf, size_t count, loff_t *ppos); 完成功能&#xff1a;读取设备产生的数据 参数&#xff1a;filp&#xff1a;指向open产生的struct file类型的对象&#xff0c;表示本次read对应的那次openpbuf&#xf…

十四五双碳双控时代下的“低碳认证”

目录 前言 十四五双碳双控时代下的“低碳认证” 一、关于“低碳认证” 二、低碳认证优势 三、环境产品认证EPD 四、EPD相关运营机构 五、碳中和相关机构 六、EPD的认证流程 七、低碳产品认证认证流程和要求 八、相关机构认证证书样例 九、证书附件表 前言 通过本篇文…

JavaWeb JQuery操作结点

目录 一、查找结点 1.简介 : 2.实例 : 二、创建结点 1.创建结点介绍 : 2.内部插入 : 2.1 介绍 : 2.2 实例 3.外部插入 : 3.1 介绍 3.2 实例 三、结点的其他相关操作 1.删除结点 &#xff1a; 2.复制结点 : 3.替换结点 : 4.遍历结点 : 一、查找结点 1.简介 : 查找到…

RAID磁盘阵列(RAID0/1/4/6/1+0)

目录 一、概述&#xff1a; 二、RAID 级别介绍 RAID 0 RAID 1 RAID 4 RAID 5 RAID 6 RAID10&#xff1a; 一、概述&#xff1a; RAID&#xff08; Redundant Array of Inexpensive Disks&#xff09;称为廉价磁盘冗余阵列。 RAID 的基本思想是把多个便宜的小磁盘组合到…

编写简单的支付接口测试用例思路

支付接口Python代码示例 以下是一个简单的支付接口Python代码示例&#xff0c;实现了用户登录后购买商品并支付的功能&#xff1a; import requests import json # 定义支付接口的URL和请求参数 url "https://example.com/pay" payment_data {"username&quo…

【业务功能篇87】微服务-springcloud-本地缓存-redis-分布式缓存-缓存穿透-雪崩-击穿

一、缓存 1. 什么是缓存 缓存的作用是减低对数据源的访问频率。从而提高我们系统的性能。 缓存的流程图 2.缓存的分类 2.1 本地缓存 其实就是把缓存数据存储在内存中(Map <String,Object>).在单体架构中肯定没有问题。 单体架构下的缓存处理 2.2 分布式缓存 在分布式环…

Iterator: hasNext()、next()、remove()

一、Iterator的API 关于Iterator主要有三个方法&#xff1a;hasNext()、next()、remove() hasNext:没有指针下移操作&#xff0c;只是判断是否存在下一个元素next&#xff1a;指针下移&#xff0c;返回该指针所指向的元素remove&#xff1a;删除当前指针所指向的元素&#xf…

树莓派 SSD1306

树莓派安装python3.9以及pip换源_树莓派安装pip_&#xff2c;&#xff2a;&#xff38;的博客-CSDN博客 树莓派使用 Python 驱动 SSD1306&#xff08;IIC/SPI 通信&#xff09; 进阶篇——树莓派OLED模块的使用 大量例程详解_oled例程_玩转智能机器人的博客-CSDN博客 使用OS 版…