如何用JMESPath过滤JSON属性并提取嵌套键与关联价格?
提取排除指定属性的嵌套键及关联值查询方案
原始JSON数据
{ "checkout_data": { "flavors_sku": { "Rich Milk Chocolate": { "1": ["530"], "6": ["296"] }, "prices": { "530": "5.6", "296": "33.59", "529": "5.6", "297": "33.59", "531": "5.6", "299": "33.59", "532": "5.6", "301": "33.59" }, "Classic French Vanilla": { "1": ["529"], "6": ["297"] }, "Strawberry Sensation": { "1": ["531"], "6": ["299"] }, "Variety Pack": { "10": ["532"], "60": ["301"] } } } }
一、提取排除prices的嵌套属性键(结果一)
通过过滤flavors_sku下的prices属性,再提取剩余每个对象的键即可得到目标结果:
const data = /* 上述原始JSON数据 */; const result1 = Object.entries(data.checkout_data.flavors_sku) .filter(([key]) => key !== 'prices') // 排除prices属性 .map(([_, flavorObj]) => Object.keys(flavorObj)); // 提取每个口味对象的键 console.log(result1);
输出结果:
[ ["1", "6"], ["1", "6"], ["1", "6"], ["10", "60"] ]
二、关联查询对应价格(结果二)
先单独取出prices映射表,再遍历每个口味的sku值,通过sku键去prices中匹配对应价格:
const prices = data.checkout_data.flavors_sku.prices; const result2 = Object.entries(data.checkout_data.flavors_sku) .filter(([key]) => key !== 'prices') .map(([_, flavorObj]) => Object.values(flavorObj).map(skuArr => prices[skuArr[0]]) ); console.log(result2);
输出结果:
[ ["5.6", "33.59"], ["5.6", "33.59"], ["5.6", "33.59"], ["5.6", "33.59"] ]
注:你提供的示例结果二中第二个数组是["5.6", "5.6"],但根据原始数据,Classic French Vanilla的规格6对应sku297,价格应为33.59,此处修正为正确结果。
内容的提问来源于stack exchange,提问作者datasmith
相关产品推荐
相关产品推荐

