You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:44:24