JSON到底能传什么类型的数据?一篇讲透!
在Web开发中,JSON(JavaScript Object Notation)几乎成了数据交换的“通用语言”,无论是前后端交互、API调用,还是配置文件存储,我们总能看到它的身影,但很多人对JSON能传输的数据类型并不清晰,甚至混淆了JSON和JavaScript(或Python等其他语言)的数据类型,今天我们就来彻底搞清楚:JSON到底能传什么类型的数据?
JSON:轻量级的数据交换格式
JSON是一种文本格式,它的核心目标是“让数据在不同语言、不同平台之间轻松传递”,它的设计初衷是简单、易读,且能被大多数编程语言直接解析。
JSON的语法规则基于JavaScript的对象字面量,但它不是JavaScript,也不是Python或其他语言——它是一种独立于语言的规范,这意味着JSON的数据类型是固定的,不会因为编程语言的不同而改变。
JSON支持的6种数据类型(核心重点)
JSON规范严格定义了它能表示的数据类型,总共只有6种:字符串、数字、布尔值、null、数组、对象,下面我们逐一拆解,并结合示例说明。
字符串(String)
字符串是JSON中最常用的类型之一,用于表示文本数据,需要注意的是:
- 必须用双引号()包裹,不能用单引号()或反引号(
`)。 - 支持Unicode字符,比如中文、emoji等。
示例:
{
"name": "张三",
"city": "北京",
"description": "这是一个\"测试\"字符串" // 双引号需转义为\"
}
数字(Number)
JSON中的数字类型不区分整数和浮点数,统一用Number表示,它的规则包括:
- 支持正数、负数,以及科学计数法(如
23e-5)。 - 不支持
NaN、Infinity等特殊值(这些不是JSON标准类型)。 - 数字前后不能有额外的空格或前导零(如
01是非法的,但0或0是合法的)。
示例:
{
"age": 25,
"price": 99.99,
"scientific": 6.022e23,
"negative": -10
}
布尔值(Boolean)
布尔值表示逻辑“真”或“假”,只有两个固定值:true和false(全小写,不能写成True或TRUE)。
示例:
{
"isStudent": true,
"isActive": false
}
null
null表示“空值”或“无值”,是一个特殊类型(注意不是undefined,也不是空字符串),它通常用于表示“该字段无有效数据”。
示例:
{
"middleName": null,
"lastLoginTime": null
}
数组(Array)
数组是有序的值集合,用方括号[]包裹,元素之间用逗号分隔,数组中的元素可以是上述任意5种类型(包括嵌套的数组和对象)。
示例:
{
"hobbies": ["阅读", "游泳", "编程"], // 字符串数组
"scores": [90, 85, 78, 92], // 数字数组
"mixedArray": [1, "two", true, null], // 混合类型数组
"nestedArray": [ // 嵌套数组
["a", "b"],
[1, 2, 3]
]
}
对象(Object)
对象是键值对的集合,用花括号包裹,每个键值对用冒号分隔(键在前,值在后),键值对之间用逗号分隔,对象的“键”必须是字符串(且必须用双引号包裹),“值”可以是上述任意5种类型(包括嵌套的对象和数组)。
示例:
{
"userInfo": { // 嵌套对象
"username": "johndoe",
"age": 30,
"address": {
"street": "人民路123号",
"city": "上海"
}
},
"permissions": ["read", "write"], // 对象中的数组值
"metadata": null // 对象中的null值
}
JSON不支持的数据类型(常见误区)
除了上述6种类型,JSON不支持以下常见数据类型,开发者容易在这些地方踩坑:
undefined
JavaScript中的undefined表示“未定义”,但JSON中没有这个类型,如果需要表示“无值”,必须用null。
错误示例:
{
"temp": undefined // ❌ JSON不支持undefined
}
函数/方法
JSON是数据交换格式,不能包含函数或方法(因为函数是可执行的代码,不是数据),如果需要传递函数逻辑,通常需要将其序列化为字符串(如函数体的字符串表示),然后在接收方解析执行(但需注意安全性风险)。
错误示例:
{
"callback": function() { return 1; } // ❌ JSON不支持函数
}
日期
JavaScript中有Date对象,但JSON中没有专门的日期类型,日期通常需要被序列化为字符串(遵循ISO 8601格式,如"2023-10-01T12:00:00Z")或时间戳(数字)。
正确示例(字符串):
{
"birthday": "1990-05-15" // 用字符串表示日期
}
正确示例(时间戳):
{
"timestamp": 1696118400000 // 用数字表示时间戳(毫秒)
}
正则表达式、Map、Set
JavaScript中的正则表达式(RegExp)、Map、Set等对象,JSON均不支持,这些类型需要手动转换为字符串或数组后再传递。
错误示例:
{
"pattern": /\d+/g // ❌ JSON不支持正则表达式
}
undefined、NaN、Infinity
虽然NaN和Infinity是JavaScript中的数字类型,但JSON规范中不包含它们,如果需要传递类似“非数字”的值,可以用null或特殊字符串(如"NaN")代替。
不同语言与JSON类型的对应关系
JSON是独立于语言的,但不同语言在解析JSON时,会将其类型映射到自身的类型,以下是常见语言的对应关系:
| JSON类型 | JavaScript | Python | Java | C# |
|---|---|---|---|---|
| 字符串(String) | string | str | String | string |
| 数字(Number) | number | int/float | int/long/double | int/decimal |
| 布尔值(Boolean) | boolean | bool | boolean | bool |
| null | null | None | null | null |
| 数组(Array) | Array | list | List/Array | Array/List |
| 对象(Object) | Object | dict | Map/Object | Dictionary |
JSON能传什么?不能传什么?
能传的6种核心类型:
- 字符串(必须双引号)
- 数字(整数、浮点数、科学计数法)
- 布尔值(
true/false) null(表示空值)- 数组(有序集合,元素可任意)
- 对象(键值对集合,键必须为字符串)
不能传的类型(需转换):
undefined→ 改用null- 函数/方法 → 改为函数体字符串(谨慎使用)
- 日期 → 改为ISO字符串或时间戳
- 正则、Map、Set → 改为字符串、数组或对象
JSON的简洁性和跨平台性,让它成为数据交换的“万能钥匙”,只要记住它的6种基本类型,避开不支持的数据类型,就能在各种开发场景中灵活使用JSON啦!



还没有评论,来说两句吧...