JSON如何取里面的值:从基础到实践的全面指南
JSON如何取里面的值:从基础到实践的全面指南
JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因易读、易解析的特性,已成为前后端数据交互的“通用语言”,无论是从API接口获取数据,还是读取配置文件,我们都离不开“从JSON中取值”这一核心操作,本文将从JSON的基础结构讲起,结合不同编程语言(以Python和JavaScript为例),由浅入深地介绍如何精准、高效地获取JSON中的数据,并附带常见问题与解决方案。
先搞懂:JSON的数据结构长什么样?
要取值,得先知道数据存在哪,JSON的核心结构只有两种:对象(Object)和数组(Array),其他都是它们的组合或衍生。
对象(Object):用“键值对”存储数据
对象用 包裹,由零到多个“键值对”组成,键(key)必须是字符串(双引号括起来),值(value)可以是字符串、数字、布尔值、数组、对象甚至null。
{
"name": "张三",
"age": 25,
"isStudent": false,
"courses": ["数学", "英语"],
"address": {
"city": "北京",
"district": "海淀区"
}
}
这里的"name"、"age"等是键,"张三"、25等是对应的值,取值时,通过“键”来访问,就像查字典通过“拼音”找“字”一样。
数组(Array):用“有序列表”存储数据
数组用 [] 包裹,元素按顺序排列,可以是任意类型(包括对象和数组)。
[
{"id": 1, "name": "苹果"},
{"id": 2, "name": "香蕉"},
{"id": 3, "name": "橙子"}
]
数组中的元素通过“索引”(从0开始)访问,比如第一个元素是{"id": 1, "name": "苹果"},索引为0。
嵌套结构:对象套数组,数组套对象
实际数据往往更复杂,比如对象里嵌套数组,数组里又嵌套对象。
{
"userId": 1001,
"orders": [
{
"orderId": "A001",
"products": [
{"name": "笔记本电脑", "price": 5999},
{"name": "鼠标", "price": 99}
]
},
{
"orderId": "A002",
"products": [
{"name": "键盘", "price": 199}
]
}
]
}
这种嵌套结构需要“逐层拆解”,从外到内依次访问。
取值前的“第一步”:将字符串解析为JSON对象
JSON数据在网络传输或文件存储时,通常以字符串形式存在(比如'{"name": "张三"}'),要取值,必须先把它“解析”成编程语言可操作的对象(如Python的dict、JavaScript的Object)。
Python:用json库解析
Python内置json模块,json.loads()用于将JSON字符串解析为字典(dict):
import json
json_str = '{"name": "张三", "age": 25}'
data = json.loads(json_str) # 解析为字典
print(data["name"]) # 输出:张三
JavaScript:直接用JSON.parse()
JavaScript原生支持JSON,JSON.parse()方法可将JSON字符串转为对象:
const jsonStr = '{"name": "张三", "age": 25}';
const data = JSON.parse(jsonStr); // 解析为对象
console.log(data.name); // 输出:张三(注意:JS用点访问对象属性)
核心操作:如何从JSON中取值?
解析完成后,就可以根据JSON的结构(对象/数组)用不同方式取值了。
场景1:取对象中的值——通过“键”访问
对象取值最简单,直接用“键”即可。
-
Python:字典通过
[key]或.get(key)访问,[key]键不存在会报错,.get(key)返回None(可指定默认值):data = {"name": "张三", "age": 25} print(data["name"]) # 输出:张三 print(data.get("age")) # 输出:25 print(data.get("gender", "未知")) # 键不存在,返回默认值"未知" -
JavaScript:对象通过
obj.key或obj[key]访问,obj.key更简洁(但键需符合变量名规则),obj[key]支持动态键:const data = {name: "张三", age: 25}; console.log(data.name); // 输出:张三 console.log(data["age"]); // 输出:25 const key = "name"; console.log(data[key]); // 输出:张三(动态键)
场景2:取数组中的值——通过“索引”访问
数组是有序的,用索引(从0开始)取值。
-
Python:列表通过
[index]访问,索引越界会报错:courses = ["数学", "英语", "编程"] print(courses[0]) # 输出:数学 print(courses[-1]) # 输出:编程(支持负索引,-1表示最后一个)
-
JavaScript:数组通过
[index]访问,索引越界返回undefined:const courses = ["数学", "英语", "编程"]; console.log(courses[0]); // 输出:数学 console.log(courses[3]); // 输出:undefined(索引不存在)
场景3:取嵌套结构中的值——逐层“剥洋葱”
嵌套结构需要“从外到内”一层层访问,用“.”或“[]”连接每一层的键/索引。
示例JSON:
{
"userId": 1001,
"orders": [
{
"orderId": "A001",
"products": [
{"name": "笔记本电脑", "price": 5999}
]
}
]
}
-
Python取值:
import json json_str = ''' { "userId": 1001, "orders": [ { "orderId": "A001", "products": [ {"name": "笔记本电脑", "price": 5999} ] } ] } ''' data = json.loads(json_str) # 取userId:直接从根对象取 user_id = data["userId"] print(user_id) # 输出:1001 # 取第一个订单的orderId:orders是数组,索引0取第一个订单,再取orderId first_order_id = data["orders"][0]["orderId"] print(first_order_id) # 输出:A001 # 取第一个订单中第一个产品的name:orders[0]→products[0]→name product_name = data["orders"][0]["products"][0]["name"] print(product_name) # 输出:笔记本电脑 -
JavaScript取值:
const jsonStr = ` { "userId": 1001, "orders": [ { "orderId": "A001", "products": [ {"name": "笔记本电脑", "price": 5999} ] } ] } `; const data = JSON.parse(jsonStr); // 取userId const userId = data.userId; console.log(userId); // 输出:1001 // 取第一个订单的orderId const firstOrderId = data.orders[0].orderId; console.log(firstOrderId); // 输出:A001 // 取第一个订单中第一个产品的name const productName = data.orders[0].products[0].name; console.log(productName); // 输出:笔记本电脑
场景4:动态取值——用变量代替固定键/索引
有时键或索引是动态的(比如用户输入、循环变量),不能用固定值,需用变量拼接。
- Python:通过
[变量]访问,注意变量需是字符串(如果是数字索引直接用数字):data = {"name": "张三", "age":



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