你有没有遇到过这种情况?从服务器拿回来一堆数据,打开一看全是大括号套小括号,一层又一层,看得头晕眼花。这就是典型的 JSON 嵌套结构。别慌,其实只要掌握几种常用方法,解析起来并不难。
什么是JSON嵌套
简单说,JSON 嵌套就是在一个对象或数组里还包含另一个对象或数组。比如你查个订单详情,返回的数据里既有用户信息,又有商品列表,每个商品还有自己的属性,这就形成了嵌套。
{
"user": {
"name": "张三",
"age": 30,
"address": {
"city": "北京",
"district": "朝阳区"
}
},
"orders": [
{
"id": 1001,
"items": [
{ "product": "咖啡机", "price": 899 },
{ "product": "磨豆机", "price": 399 }
]
}
]
}
用点符号一层层剥开
在 JavaScript 中,最直接的办法是用点(.)和中括号([])一层层往下找。比如要拿到用户的所在城市:
const city = data.user.address.city; // 北京
如果中间某个层级是 null 或者不存在,程序就会报错。所以稳妥一点的做法是加判断:
const city = data.user && data.user.address ? data.user.address.city : null;
利用解构赋值简化操作
现代 JS 支持解构,能让你少打很多字。比如你想同时取出用户名和第一个订单里的第一个商品名:
const { name } = data.user;
const { product } = data.orders[0].items[0];
console.log(name, product); // 张三 咖啡机
还能给嵌套结构直接解构:
const {
user: {
address: { city }
},
orders: [
{
items: [firstItem]
}
]
} = data;
console.log(city, firstItem.product); // 北京 咖啡机
动态遍历不确定层级
有些时候数据结构不固定,比如配置项可能深浅不一。这时候可以用递归函数来“挖到底”。
function traverse(obj, path = '') {
for (let key in obj) {
const currentPath = path ? `${path}.${key}` : key;
if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) {
traverse(obj[key], currentPath);
} else {
console.log(`${currentPath}: ${obj[key]}`);
}
}
}
// 调用后会打印出所有叶子节点的路径和值
traverse(data);
Python里怎么处理
如果你用 Python 处理接口数据,json 模块加载后的结果就是字典和列表的组合。访问方式类似:
import json
data = json.loads(response_text)
city = data['user']['address']['city']
但同样要注意 KeyError,建议用 get 方法更安全:
city = data.get('user', {}).get('address', {}).get('city', '未知')
实际场景小技巧
比如你在做一个购物车页面,后台返回的数据层层嵌套,但你只需要展示商品名称和总价。与其一层层去取,不如一开始就写个提取函数:
function getCartSummary(data) {
const items = data.orders[0].items;
const total = items.reduce((sum, item) => sum + item.price, 0);
return {
count: items.length,
total,
products: items.map(i => i.product)
};
}
这样后续代码只跟摘要数据打交道,逻辑更清晰,也不怕结构变来变去。