JSON转换器---需求分析

本文详细阐述了JSON转换器组件的需求分析,包括其在Ajax应用中的使用场景及核心功能。重点介绍了如何将JSON文本串与Java对象相互转换,并明确了转换规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.2  需求分析

本章对JSON 转换器组件的需求进行分析,确定使用场景和核心功能。

8.2.1  需求场景

使用JSON转换器的Ajax应用,交互序列如图8-3所示。

 

图8-3  使用JSON 转换器的Ajax应用交互序列

与图8-2相比,变化的是在服务端的业务处理过程,具体细分为三个步骤:

(1)将客户端异步提交过来的JavaScript数据,通过JSON转换器转换为Java数据;

(2)对Java数据进行业务处理;

(3)将业务处理结果的Java数据,通过JSON转换器,转换为JSON格式的JavaScript数据,回送给客户端。

第(1)步和第(3)步,是JSON转换器的主要使用场景。

8.2.2  核心功能

JSON 转换器的核心功能,只有两个:

(1)将JSON文本串转换为Java对象;

(2)将Java对象转换为JSON文本串。

在转换过程中,需要明确数据转换规则,也就是要确定:什么样的JSON文本串,可以转换为什么样的Java对象,反之亦然。

根据JSON 的语法规范,其只有两种基本格式的文本串:

(1)用{和} 括起来的名/值对;

(2)用[和]括起来的一系列值。

上述两种基本格式还可以进行任何层次的嵌套。

而Java数据,都是对象,包括语言的内置类型、日期类型、集合类型,还有用户自定义的对象。

JSON 转换器的数据转换规则,汇总如下:

JSON文本串 ->  Java对象

JSON

示例

Java

类型

示例

单值

"5"

基本类型(自动转换为目标对象类型)

String

5

Integer

5

Double

5

'2008-12-02 14:25:06'

Timestamp

"2008-12-02 14:25:06"

值序列

[1, 5, 7, 12]

数组或集合类型(自动转换为目标对象类型)

int[]

 

Integer[]

 

List

 

ArrayList

 

LinkedList

 

Set

 

HashSet

 

名值对

{x:20, y:50}

Map或自定义对象类型

Map

key="x",value=20
key="y",value=50

自定义对象

public class Point {
private int x;
private int y;
//... get/set methods
}

续表

嵌套

[[20,50], [200, 450]]

根据以上规则,进行相应嵌套对应

int[][]

 

{leftUpper: {x:20,y:50}, rightDown: {x:200, y:450}}

自定义
对象

public class Rect {
private Point leftUpper;
private Point rightDown;
//... get/set methods
}

{leftUpper: [20,50], rightDown: [200, 450]}

自定义
对象

public class Rect {
private int[] leftUpper;
private int[] rightDown;
//... get/set methods
}

Java对象 -> JSON文本串

Java

类型

示例

JSON

示例

基本类型

String

5

单值

"5"

Integer

5

5

Double

5.26

5.26

Timestamp

 

'2008-12-02 14:25:06'

数组或集合类型

int[]

 

值序列

[1, 5, 7, 12]

Integer[]

 

List

 

ArrayList

 

LinkedList

 

Set

 

HashSet

 

续表

Map或自定义对象

Map

key="x",value=20
key="y",value=50

名值对

{x:20, y:50}

自定义对象

public class Point {
private int x;
private int y;
//... get/set methods
}

组合

int[][]

 

嵌套

[[20,50], [200, 450]]

自定义对象

public class Rect {
private Point leftUpper;
private Point rightDown;
//... get/set methods
}

{leftUpper: {x:20,y:50}, rightDown: {x:200, y:450}}

自定义对象

public class Rect {
private int[] leftUpper;
private int[] rightDown;
//... get/set methods
}

{leftUpper: [20,50], rightDown: [200, 450]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值