如何从自定义JSON中解析获取特定子值?
如何从你的Tour of Honor JSON中检索特定子值
嘿,我来帮你搞定从这个Tour of Honor JSON里提取特定子值的问题!先拆解下你的数据结构:顶层包含name、version字段,核心是bonuses数组,每个数组元素都是一个带bonusCode、name、value等字段的对象。下面分几种常用场景给你具体实现方案:
场景1:根据bonusCode查找单个条目里的子值
比如你想找AZ1对应的名称或者所在城市,用Python和JavaScript的实现如下:
Python 实现
import json # 你的JSON数据(也可以从本地文件读取) json_data = '''{ "name":"Tour of Honor Bonus Listing", "version":"18.1.3", "bonuses": [ { "bonusCode":"AZ1", "category":"ToH", "name":"Anthem Tour of Honor Memorial", "value":1, "city":"Anthem", "state":"AZ", "flavor":"Flavor Text Goes Here", "imageData":"Base64 Text Goes Here" }, { "bonusCode":"AZ2", "category":"ToH", "name":"Benson Tour of Honor Memorial", "value":1, "city":"Benson", "state":"AZ", "flavor":"Flavor Text..." } ] }''' # 解析JSON字符串为Python字典 data = json.loads(json_data) # 目标bonusCode target_code = "AZ1" # 遍历数组查找匹配项 for bonus in data["bonuses"]: if bonus["bonusCode"] == target_code: # 获取你需要的子值,比如名称、城市 print(f"名称: {bonus['name']}") print(f"所在城市: {bonus['city']}") break else: print(f"没找到bonusCode为{target_code}的条目")
JavaScript 实现
// 你的JSON数据 const jsonData = { "name":"Tour of Honor Bonus Listing", "version":"18.1.3", "bonuses": [ { "bonusCode":"AZ1", "category":"ToH", "name":"Anthem Tour of Honor Memorial", "value":1, "city":"Anthem", "state":"AZ", "flavor":"Flavor Text Goes Here", "imageData":"Base64 Text Goes Here" }, { "bonusCode":"AZ2", "category":"ToH", "name":"Benson Tour of Honor Memorial", "value":1, "city":"Benson", "state":"AZ", "flavor":"Flavor Text..." } ] }; // 目标bonusCode const targetCode = "AZ2"; // 用find方法快速查找匹配项 const matchedBonus = jsonData.bonuses.find(item => item.bonusCode === targetCode); if (matchedBonus) { console.log(`名称: ${matchedBonus.name}`); console.log(`分值: ${matchedBonus.value}`); } else { console.log(`没找到bonusCode为${targetCode}的条目`); }
场景2:提取所有同类子值
比如你想把所有bonusCode或者name都捞出来,代码会更简洁:
Python 示例
# 提取所有bonusCode all_bonus_codes = [bonus["bonusCode"] for bonus in data["bonuses"]] print("所有bonusCode:", all_bonus_codes) # 输出: ['AZ1', 'AZ2'] # 提取所有名称 all_bonus_names = [bonus["name"] for bonus in data["bonuses"]] print("所有名称:", all_bonus_names)
JavaScript 示例
// 提取所有bonusCode const allBonusCodes = jsonData.bonuses.map(item => item.bonusCode); console.log("所有bonusCode:", allBonusCodes); // 输出: ['AZ1', 'AZ2'] // 提取所有名称 const allBonusNames = jsonData.bonuses.map(item => item.name); console.log("所有名称:", allBonusNames);
小技巧:优化大数据量的查找效率
如果你的bonuses数组条目很多,建议先把数组转成以bonusCode为键的字典/对象,这样后续查找就能直接通过键取值,不用每次遍历数组:
Python 优化
# 转成字典,key为bonusCode,value为整个条目 bonus_dict = {b["bonusCode"]: b for b in data["bonuses"]} # 直接通过bonusCode获取条目 target_bonus = bonus_dict.get("AZ1") if target_bonus: print(target_bonus["name"])
JavaScript 优化
// 转成对象,key为bonusCode,value为整个条目 const bonusObj = jsonData.bonuses.reduce((acc, item) => { acc[item.bonusCode] = item; return acc; }, {}); // 直接通过bonusCode获取条目 const targetBonus = bonusObj["AZ2"]; if (targetBonus) { console.log(targetBonus.city); }
内容的提问来源于stack exchange,提问作者DJFriar
相关产品推荐
相关产品推荐

