Javaweb基础之json

大家好,这里是教授.F

目录

引入:

定义格式:

json规制:

 字符串转json:

json转字符串:

字符串和json转化细节:

json在java中的使用:

应用实例:

        JavaBean和json字符串的转换:

        list和json对象的转换:

补充: 

        map和json的转换:


引入:

        json就是前后端交互数据使用到的一种格式。

定义格式:

json规制:

 字符串转json:

       JSON.parse(string) 函数会返回对应的 json 对象, 并不会影响原来string.

json转字符串:

          JSON.springify(json 对 象) 会 返 回对 应 string, 并 不 会影响原来json 对象, 演示json_string_detail.html

字符串和json转化细节:

        1.在定义 Json 对象时, 可以使用 ' ' 表示字符串, 比如 var json_person = {"name": "jack", "age": 100}; 也可以写成 var json_person = {'name': 'jack', 'age': 100};

        2、但是在把原生字符串转成 json 对象时, 必须使用 "", 否则会报错比如:var str_dog = "{'name':'小黄狗', 'age': 4}"; 转 json 就会报错

        3、JSON.springify(json 对象) 返回的字符串, 都是 "" 表示的字符串, 所以在语法格式正确的情况下, 是可以重新转成 json 对象的

json在java中的使用:

        1. java 中使用 json,需要引入到第 3 方的包 gson.jar

        2. Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的Java 类库。

        3. 可以对 JSON 字符串 和 Java 对象相互转换

应用实例:

        JavaBean和json字符串的转换:

                

import com.fasterxml.jackson.databind.ObjectMapper;public class Main {public static void main(String[] args) {// 创建一个Person对象Person person = new Person("John", 30);// 将Person对象转换为JSON字符串String json = convertObjectToJson(person);System.out.println("Person对象转换为JSON字符串:");System.out.println(json);// 将JSON字符串转换为Person对象Person personFromJson = convertJsonToObject(json, Person.class);System.out.println("\nJSON字符串转换为Person对象:");System.out.println("Name: " + personFromJson.getName());System.out.println("Age: " + personFromJson.getAge());}// 将JavaBean对象转换为JSON字符串public static String convertObjectToJson(Object object) {try {ObjectMapper mapper = new ObjectMapper();return mapper.writeValueAsString(object);} catch (Exception e) {e.printStackTrace();return null;}}// 将JSON字符串转换为JavaBean对象public static <T> T convertJsonToObject(String json, Class<T> valueType) {try {ObjectMapper mapper = new ObjectMapper();return mapper.readValue(json, valueType);} catch (Exception e) {e.printStackTrace();return null;}}
}

        list和json对象的转换:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;public class Main {public static void main(String[] args) {// 创建一个Person列表List<Person> personList = new ArrayList<>();personList.add(new Person("John", 30));personList.add(new Person("Alice", 25));// 将List转换为JSON数组String jsonArray = convertListToJson(personList);System.out.println("List转换为JSON数组:");System.out.println(jsonArray);// 将JSON数组转换为ListList<Person> personListFromJson = convertJsonToList(jsonArray);System.out.println("\nJSON数组转换为List:");for (Person person : personListFromJson) {System.out.println("Name: " + person.getName() + ", Age: " + person.getAge());}}// 将List转换为JSON数组public static String convertListToJson(List<?> list) {Gson gson = new Gson();return gson.toJson(list);}// 将JSON数组转换为Listpublic static List<Person> convertJsonToList(String jsonArray) {Gson gson = new Gson();Type listType = new TypeToken<ArrayList<Person>>() {}.getType();return gson.fromJson(jsonArray, listType);}
}
补充: 
    // gson需要得到类型的完整路径,然后进行底层反射// TypeToken()能得完整类型的路径Type type = new TypeToken<List<Book>>(){}.getType();new TypeToken<List<Book>>()如果我们不加上{},TypeToken调用的是TypeToken的无参构造器,但是TypeToken的无参构造器是所保护的。一个方法是protected,而且不在同一个包是不能直接访问的。那为什么加上了{}就能访问了呢????这是因为涉及匿名内部类的知识。new TypeToken<List<Book>>(){}的类型就不是TypeToken,而是一个匿名内部类这个匿名内部类有自己的无参构造器(隐式),根据java基础规制,当执行子类的无参构造器时,默认super()

   

t1包
//A类
public class A{protected A(){System.out.println("aaaa");}
}/*因为A类和Test不在同一个包,所以不能访问A类的protected方法,包括构造器A<String>(){}就是一个匿名内部类,可以理解是A类子类A<String>(){} 匿名内部类,有一个隐式的无参构造器,根据Java基础,无参构造器有默认super()当执行时,会调用A类的无参的protected构造器*/t2包
//Test类
public class Test{public static void main(String[] args){A a = new A(){};System.out.println("加上{}后就能用了");}
}

        map和json的转换:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;public class MapJsonConverterWithTypeToken {private static final Gson gson = new Gson();// 将Map转换为JSON字符串public static String mapToJson(Map<String, Object> map) {Type type = new TypeToken<Map<String, Object>>() {}.getType();return gson.toJson(map, type);}// 将JSON字符串转换为Mappublic static Map<String, Object> jsonToMap(String json) {Type type = new TypeToken<Map<String, Object>>() {}.getType();return gson.fromJson(json, type);}public static void main(String[] args) {// 创建一个Map对象Map<String, Object> map = new HashMap<>();map.put("name", "John");map.put("age", 30);// 将Map转换为JSON字符串String json = mapToJson(map);System.out.println("Map转换为JSON字符串:");System.out.println(json);// 将JSON字符串转换为MapMap<String, Object> mapFromJson = jsonToMap(json);System.out.println("\nJSON字符串转换为Map:");for (Map.Entry<String, Object> entry : mapFromJson.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}

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

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

相关文章

ZL-GL-4离体组织灌流系统测试在恒温条件下离体标本的肌张拉力

简单介绍&#xff1a; 离体组织灌流系统为生理实验及药理实验提供恒温环境&#xff0c;在麦氏浴皿内加养液同时能通氧&#xff0c;测试在恒温条件下离体标本的肌张拉力&#xff0c;离体组织灌流系统具有进气口,配备微调固定器,省时省力,并提高了实验效率,同时可方便串联恒温供水…

prometheus+alertmanager+webhook钉钉机器人告警

版本&#xff1a;centos7.9 python3.9.5 alertmanager0.25.0 prometheus2.46.0 安装alertmanager prometheus 配置webhook # 解压&#xff1a; tar -xvf alertmanager-0.25.0.linux-amd64.tar.gz tar -xvf prometheus-2.46.0.linux-amd64.tar.gz mv alertmanager-0.25.0.linu…

C/S模型测试及优化

1 1.1代码示例 #include<stdio.h> #include<stdio.h>#include <sys/types.h> /* See NOTES */ #include <sys/socket.h>#include <netinet/in.h> #include <netinet/ip.h> /* superset of previous */ #include <arpa/inet.…

计算机基础知识

计算机基础知识 计算机是如何工作的 在本节内容中,介绍了计算机核心工作机制,计算机结构,框架等,计算机需求在人类的历史中是广泛存在的,发展大体经历了从一般计算工具到机械计算机到目前的电子计算的发展过程 文章目录 计算机基础知识一、冯诺依曼体系结构二、CPUCPU的核心参…

STM 32_HAL_SDIO_SD卡

STM32的SDIO&#xff08;Secure Digital Input Output&#xff09; 接口是一种用于SD卡和MMC卡的高速数据传输接口。它允许STM32微控制器与多种存储卡和外设进行通信&#xff0c;支持多媒体卡&#xff08;MMC卡&#xff09;、SD存储卡、SDI/O卡和CE-ATA设备。STM32的SDIO控制器…

JAVA-学习

一、垃圾回收机制 1、为什么要进行垃圾回收机制 如果不进行垃圾回收&#xff0c;内存迟早都会被消耗空&#xff0c;因为我们在不断的分配内存空间而不进行回收。除非内存无限大&#xff0c;我们可以任性的分配而不回收&#xff0c;但是事实并非如此。所以&#xff0c;垃圾回收…

【大模型】在大语言模型的架构中,Transformer有何作用?

Transformer在大语言模型架构中的作用 Transformer是一种用于序列到序列&#xff08;Seq2Seq&#xff09;任务的深度学习模型&#xff0c;由Vaswani等人于2017年提出。在大语言模型&#xff08;LLM&#xff09;的架构中&#xff0c;Transformer扮演着关键的角色&#xff0c;它…

Flink中因java的泛型擦除导致的报错及解决

【报错】 Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function Custom Source could not be determined automatically, due to type erasure. You can give type information hints by using th…

【php实战项目训练】——thinkPhP的登录与退出功能的实现,让登录退出畅通无阻

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

Mendix 创客访谈录|Mendix助力开发高手10日交付复杂应用,且支持移动端呈现

本期创客 莊秉勳 布鲁科技技术顾问 各位Mendix社群的夥伴好&#xff0c;我是莊秉勳&#xff0c;大家也可以叫我Danny。 我大學是資訊科學背景&#xff0c;在與Mendix相遇前&#xff0c;曾在一上市製造企業&#xff0c;擔任軟體工程師&#xff0c;負責企業內部軟體開發&#xf…

Virtualbox 安装unbuntu + qemu

0. 前言 关于 Virualbox 安装虚拟机的优秀文章太多了&#xff0c;笔者主要是着重梳理一些安装小细节&#xff0c;利己利人&#xff01;&#xff01; 如果需要保姆式的安装教程&#xff0c;可以查看后续的参考链接。 1. VirtualBox 的安装 直接去官网搜索最近的软件即可&…

js每日十题(二)

1. 6.3 js第6题 以下结语句中&#xff0c;返回true的是&#xff1f; A !![] B 1’1’ C nullundefined D !!’’ 答&#xff1a; A选项&#xff0c;由于数组属于对象类型&#xff0c;所以空的数组转换成布尔型是true&#xff0c;前置&#xff01;&#xff01;&#xff0c;两次取…

【paper】环形虚拟管内的多无人机协同目标包围

Multi-UAV cooperative target encirclement within an annular virtual tube2022.8ELSEVIER Aerospace Science and Technology【Q1 5.6】Yan Gao 全权 北航 Q1 Background&#xff1a;本文试图解决一个什么样的问题&#xff1f; 多无人机对单个静态目标进行连续包围任务&…

基于聚类和回归分析方法探究蓝莓产量影响因素与预测模型研究附录

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 目录 背景数据说明数据来源思考 附录数据预处理导入包以及数据读取数据预览数据处理 相关性分析聚类分析数据处理确定聚类数建立k均值聚类模型 …

12- Redis 中的 链表 数据结构

Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构&#xff0c;所以 Redis 自己设计了一个链表数据结构。 1. 链表节点结构设计 先来看看【链表节点】结构的样子&#xff1a; typedef struct listNode {//前置节点struct listNode *prev;//后置节点…

liunx配置网络的命令

liunx配置网络的命令 文章目录 liunx配置网络的命令ifconfig命令查看路由表信息netstat命令ss命令lsof命令ping 命令nslookup命令 ifconfig命令 ifconfig:显示正在工作的网卡&#xff0c;启动的设备 ifconfig -a 展示所有设备 ens33: flags4163<UP,BROADCAST,RUNNING,MUL…

RK3588+FPGA+算能BM1684X:高性能AI边缘计算盒子,应用于视频分析、图像视觉等

搭载RK3588&#xff08;四核 A76四核 A55&#xff09;&#xff0c;CPU主频高达 2.4GHz &#xff0c;提供1MB L2 Cache 和 3MB L3 &#xff0c;Cache提供更强的 CPU运算能力&#xff0c;具备6T AI算力&#xff0c;可扩展至38T算力。 产品规格 系统主控CPURK3588&#xff0c;四核…

数字、钱工具栏

/*** 提取字符串中的 数字 带小数点 &#xff0c;没有就返回"0"** param money* return*/fun getMoney(money: String): String {var money moneyvar pattern Pattern.compile("(\\d\\.\\d)")var m pattern.matcher(money)if (m.find()) {money if (m.…

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

攻防世界babyRE做法(Linux调试)

在做题之前我们先了解一些知识点&#xff0c;首先是汇编中的知识点&#xff0c;汇编中&#xff0c;数据和代码可以说是一回事&#xff0c;数据和代码可以无条件相互转换&#xff0c;换句话说&#xff0c;数据就是代码&#xff0c;代码就是数据 接下来开始做题&#xff0c;简单…