首页 > 其他分享 >03-前后端数据传输格式-下

03-前后端数据传输格式-下

时间:2024-03-13 09:56:18浏览次数:24  
标签:03 Java 对象 JSON 数据传输 字符串 格式 序列化

image.png | 400

请求:JSON转换为Java对象

响应:Java对象转换为JSON

JSON

想完成跨内存(浏览器/服务器、服务器/服务器)的数据传输、对象转换,必须经过网络传输,而且需要一个传递信息的载体,还需要序列化和反序列化的操作

  • 传递信息的载体

JSON简单来说就是特定格式的字符串JSON的载体就是字符串。JS对象和Java对象都是对象,存活于内存中(浏览器/服务器),JSON只是字符串,只承担网络传输的角色:

image.png | 450

在前端中本身没有JSON对象,在下面的内容里:

let person = {"name":"zhangsan","sex":"男","age":24}

这只是一个JS的字面量对象,只是JS对象的一个子集而已。因为满足JSON的格式被称为 JSON对象,但是这样是不太严谨的。

  • 序列化和反序列化

在学习[[011-IO|IO流]]时学习过序列化流和反序列化流,通过这两种流就可以实现对象的序列化和反序列化

[!NOTE] Title
序列化:将对象状态转化为可保持可传输的过程,一般的格式是与平台无关的二进制流,也可以将这种二进制流持久保存在磁盘上,或者通过网络将这种二进制流传输到另一个网络节点,在另一节点进行反序列化为对象。典型应用就是分布式系统

序列化的另一种用途则是作为不同工程间的远程通讯。对于一般的单体架构来说,不需要进行对象序列化,但是一旦涉及到远程调用或者分布式系统,一个系统调用另一个系统的服务时,POJO对象必须[[011-IO#序列化版本号|支持序列化]]。这样在一个系统中序列化后,经过网络传输到达另一个系统时,可以通过反序列化重构对象,在这个系统中也可以使用这个对象。

实际上,整个请求响应的过程都是序列化和反序列化的过程:

请求:

  • 浏览器将JS对象序列化为JSON字符串
  • 网络传输JSON字符串
  • 服务器获取到JSON字符串后反序列化为Java对象

响应:

  • 服务器端将Java对象序列化为JSON
  • 网络传递JSON字符串
  • 浏览器获取到JSON字符串后反序列化为JSON对象

不仅是浏览器-服务器,服务器-服务器之间也需要JSON作为数据传输的载体

image.png | 700

JSON的格式

{
	"name" : "zhangsan",
	"age" : 15,
	"hobby" : ["smoke","drink"]
}

JSON规定的格式:

  • "key" : "value" 表示对象的字段,如果value是字符串类型需要加双引号,数值类型可以不加

  • {} 表示 对象Map其他符合key-value格式的结构

  • [] 表示 一组对象一组字符串一组数值

各个语言都会遵守这个规定,转化为自身的对象结构,比如:

  • {} 代表Java对象/Map, [] 对应Java的数组、List、Set等单列集合

  • {} 代表Python对象/字典, [] 对应Python的元组或list

  • {} 代表PHP的对象, [] 对应PHP的Array

JS对象和Java对象属于同一层次,而JSON只是一个字符串,常用在两个节点之间网络传输数据

JSON格式与Java对象的转换

标签:03,Java,对象,JSON,数据传输,字符串,格式,序列化
From: https://www.cnblogs.com/euneirophran/p/18069945

相关文章

  • XAML格式化工具:XAML Styler
    XAML格式化的意义#在开发WPF应用过程中,编写XAML时需要手动去缩进或者换行,随着时间的推移或者参与开发的人增多,XAML文件内容的格式会越来越乱。要么属性全都写在一行,内容太宽一屏无法完整展现;要么属性单独占一行,难以直观的看清结构;另外xaml元素的属性无序,重要属性查找困难,手动维......
  • 做题笔记2024.03
    2024.03.12#1CapitalismCF1450E奇环显然无解有解就直接差分约束就行https://www.luogu.com.cn/record/150592177[2024.03.12#2LEGOndaryGrandmasterCF1615F]不是自己想的/kk看了题解,感觉都说这个转换是显然的,还是太菜考虑将所有偶数位的数先翻转一次,这样原来的操作......
  • YC256B [ 20240312 CQYC省选模拟赛 T2 ] count
    题意对于一个长度为\(n\)的排列\(P\)。你需要求出所有满足条件的长度为\(k\)的数列\(A\)的个数。\(A\)单调不减且\(1\leA_i\len\)\(\min_{j=1}^{A_1}P_j=\min_{j-1}^{A_i}P_j\)求出对于\(P_1=x\)的所有排列的满足条件的\(A\)的个数。Sol......
  • 20240312
    我的心理素质太差了!又破防了!晚自习看到yyn在写点什么,好奇地凑过去看,兔子也看到了,但是他不理解「fjb」这个名词,问我是什么。我不相信兔子这种接触成人内容这么多的人还不知道,我就说了一个「sextoy」(当然我不知道这么说对不对,没准又要被某位同学锐评了),兔子没理解到,我给他说自己......
  • hadoop报错:is running 446528000B beyond the 'VIRTUAL' memory limit
    发现问题今天在配置hadoop文件时,报错:isrunning446528000Bbeyondthe'VIRTUAL'memorylimit.Currentusage:73.9MBof1GBphysicalmemoryused;2.5GBof2.1GBvirtualmemoryused.Killingcontainer.意思是虚拟内存,超出了限制。然后将虚拟机内存改为3G关闭集群......
  • 20240311 大模型快讯
    //社区生态//零一万物自研全导航图向量数据库。零一万物宣布推出基于全导航图的新型向量数据库笛卡尔(Descartes),已包揽权威榜单ANN-Benchmarks6项数据集评测第一名。//语言大模型//清华发布大模型长文本理解方法InfLLM。InfLLM在没有引入额外训练的情况下,利用一个外部......
  • 003-方法
    方法方法:实现了代码复用[修饰符列表]+返回值+方法名+(形式参数列表){ 方法体;}形式参数列表中每一个参数都是一个局部变量,方法结束之后内存释放;形参的数据类型起决定性作用,形参对应的变量名是随意的方法调用语句:类名.方法名publicclassMethodTest01{pub......
  • 2023.03.12
     第六天 所花时间(包括上课) 3h 代码量(行) 100行 博客量(篇) 1篇 所学习到的内容 android的页面制作(下拉框,如何输入文字等)       packagecom.example.myapplication1;importandroidx.appcompat.app.AppCompatActivity;importand......
  • 基于STM32F103C8T6单片机学习(江科大版本)
    学习内容1:用库函数来控制IO输出控制LED闪烁,LED流水灯,蜂鸣器主要用到GPIO_unit()函数配置GPIO口和RCC外设时钟控制函数,GPIO的写函数,setbitsresitbits,write等函数 1.led闪烁1.文件配置LED闪烁硬件电路图​​​​​ 首先打开文件管理器,在STM32>工程项目文件......
  • 20240312打卡
    第三周第一天第二天第三天第四天第五天第六天第七天所花时间3h5h代码量(行)274256博客量(篇)11知识点了解完成AndroidStudio中原生数据库SQlite简单的CRUD本地数据库连接到远程数据库SQLite在Android应用中与远程MySQL数据......