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数组转换为List
        List<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数组转换为List
    public 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字符串转换为Map
    public 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字符串转换为Map
        Map<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());
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决ESP-IDF工程里面C/C++找不到路径标红的问题

解决ESP-IDF工程里面C/C找不到路径标红的问题 教程 源文件 打开这一个文件 {"configurations": [{"name": "ESP-IDF","cStandard": "c11","cppStandard": "c17","compileCommands": "…

论文AI率过高?掌握这四种技巧轻松降重

随着人工智能技术的突飞猛进&#xff0c;AI生成内容&#xff08;AIGC&#xff09;已被广泛用于学术论文撰写中&#xff0c;提高效率同时也带来了原创性的挑战。面对日益严格的学术审查&#xff0c;一个突出的问题是&#xff1a;使用AI代写的论文能否通过内容检测&#xff1f;因…

【数据结构】图论中求最短路径——迪杰斯特拉算法(Dijkstra)、弗洛伊德算法(Floyd)

目录 最短路径 (*)迪杰斯特拉算法&#xff08;Dijkstra&#xff09;迪杰斯特拉算法&#xff08;Dijkstra&#xff09;的算法原理&#xff1a; 弗洛伊德算法&#xff08;Floyd&#xff09;弗洛伊德算法&#xff08;Floyd&#xff09;的算法原理&#xff1a;弗洛伊德算法的&#…

导弹研究中常用坐标系及坐标系之间的变换

在导弹飞行控制过程中&#xff0c;需要时刻掌握导弹的飞行状态 &#xff08;速度、位置、姿态角等&#xff09;&#xff0c;这就有赖于描述导弹飞行状态的坐标系。除了大地坐标系和地心大地直角坐标系外&#xff0c;导弹常用的坐标系还有很多&#xff0c;合理而恰当地选择参考系…

【LangChain系列】第二篇:文档拆分简介及实践

在上一篇博客中&#xff0c;我们学习了如何使用LangChain的文档加载器将文档加载为标准格式。加载文档后&#xff0c;下一步是将它们拆分为更小的块。这个过程乍一看似乎很简单&#xff0c;但有一些微妙之处和重要的考虑因素会显着影响下游任务的性能和准确性。 一、为什么文档…

qcom 平台系统签名流程

security boot 平台的东东&#xff0c;oem 可定制的功能有限&#xff0c;只能参考平台文档&#xff0c;可以在高通的网站上搜索&#xff1a;Secure Boot Enablement&#xff0c;然后找对应平台的文档xxx-Secure Boot Enablement User Guide, step by step 操作即可 开机校验流…

【人工智能】第五部分:ChatGPT的实际应用案例和未来发展方向

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【成品设计】基于STM32的体温监控系统的设计与实现

《基于STM32的体温监控系统的设计与实现》 整体功能&#xff1a; 体温监控系统采用STM32F103VET6单片机为主控&#xff0c;在此基础上移植了一款国产嵌入式操作系统RT-thread进行开发设计的。 该系统的主要工作逻辑为&#xff1a;管理员可先将相关人员的指纹、ID等数据录入系…

AC/DC电源模块的效率如何?

BOSHIDA AC/DC电源模块的效率如何&#xff1f; AC/DC电源模块是一种将交流电转换为直流电的装置&#xff0c;常用于电子设备的电源部分。其效率是指输入电功率与输出电功率的比值&#xff0c;通常以百分比表示。AC/DC电源模块的效率主要取决于以下几个因素&#xff1a;开关频…

EE trade:如何在A股市场中有效设定止盈止损点

A股市场充满机遇和风险&#xff0c;很多投资者在这里实现了财富增长&#xff0c;也有投资者在这里遭受损失。如何在波动性较大的市场中&#xff0c;控制风险&#xff0c;保护利润和本金?止盈止损是关键。 什么是止盈止损? 止盈止损是指在交易中&#xff0c;根据预先设定的条…

酱菜产业:传承美味,点亮生活

酱菜&#xff0c;这道深受人们喜爱的传统美食&#xff0c;以其独特的风味和营养价值&#xff0c;点亮了我们的日常生活。酱菜产业作为美食文化的重要组成部分&#xff0c;正以其独特的魅力&#xff0c;吸引着越来越多的消费者。 酱菜产业的赵总说&#xff1a;酱菜的制作过程&am…

深入分析 Flink SQL 工作机制

摘要&#xff1a;本文整理自 Flink Forward 2020 全球在线会议中文精华版&#xff0c;由 Apache Flink PMC 伍翀&#xff08;云邪&#xff09;分享&#xff0c;社区志愿者陈婧敏&#xff08;清樾&#xff09;整理。旨在帮助大家更好地理解 Flink SQL 引擎的工作原理。文章主要分…

电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率

提高开发效率&#xff1a;电商API接口允许不同的应用程序之间高效地进行交互&#xff0c;节省了大量的人力物力成本&#xff0c;使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性&#xff1a;通过对数据进行安全加密&#xff0c;API接口实现了对数据的保护…

java自学阶段二:JavaWeb开发45(git学习)

目录&#xff1a; 学习目标git的使用&#xff08;工作流程、常用命令、idea集成&#xff09; 一、学习目标&#xff1a; 了解Git基本概念能够了解git的工作流程能够使用Git常用命令熟悉Git代码托管服务能够使用idea操作git 二、git的使用 1&#xff09;git的概念&#xff1…

Oracle 19c OCM认证

Oracle OCM介绍 Oracle Certified Master (OCM) -Oracle认证大师&#xff0c;是Oracle认证的最高级别&#xff0c;是对数据库从业人员的技术、知识和操作技能的最高级别的认可&#xff0c;IT界顶级认证之一。Oracle OCM是解决最困难的技术难题和最复杂的系统故障的最佳Oracle专…

凡尔码搭建设备巡检系统数字化管理平台

一、搭建过程概述 利用凡尔码搭建设备巡检的数字化管理平台&#xff0c;首先需要对凡尔码平台有深入的了解&#xff0c;明确其提供的核心功能和特性&#xff0c;以及如何在设备巡检领域发挥其优势。接着&#xff0c;通过系统规划、组件配置、数据录入和表单创建等步骤&#xff…

短剧小程序App系统源码:打造个性化追剧体验

随着数字媒体的迅猛发展&#xff0c;短剧作为一种新兴的娱乐形式&#xff0c;越来越受到广大观众的喜爱。为了满足用户对短剧内容的个性化需求&#xff0c;短剧小程序App系统应运而生。本文将深入探讨短剧App源码的核心功能&#xff0c;以及如何通过多语言支持和国际支付等技术…

形如SyntaxError: EOL while scanning string literal,以红色波浪线形式在Pycharm下出现

背景&#xff1a; 新手在学习Python时可能会出现如下图所示的报错 下面分情况教大家如何解决 过程&#xff1a; 问题概述&#xff1a; 简单来说就是你单引号、双引号、三引号写的时候末尾注意要和前面写的匹配。 具体如下 """ 编辑器报错&#xff1a;Synt…

在Windows中使用svn的命令行

windows下使用svn命令行_svn命令行工具在哪里-CSDN博客 先下载命令行工具 再进行配置 set SVN_CMD_HOMEC:\Users\admin\Desktop\Apache-Subversion-1.14.0\bin(你的安装路径) set path%path%;%SVN_CMD_HOME% svn help查看svn版本 命令行查看svn版本--真实有效_svn 版本查看…

Java Web学习笔记4——HTML、CSS

HTML&#xff1a; HTML&#xff1a;超文本标记语言。 超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&#xff0c;还可以定义图片、音频、视频等内容。 标记语言&#xff1a;有标签构成的语言。 HTML标签都是预定义好的&#xff0c;例如&a…