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

如何基于条件访问嵌套JSON中的decimal值?

问题分析与解决

你的核心问题是过早丢弃了关联数据:第一步只提取了type列,导致后续循环中无法对应到该type对应的prices数据;同时在循环里对仅含type的Series调用pd.json_normalize完全错误,因为这个Series里根本没有prices字段。

正确实现步骤

  1. 完整规范化嵌套JSON的outcomes层级,保留所有字段(包括type和prices)
  2. 直接过滤出type == 'MR'的行
  3. 展开prices数组(因为它是列表结构),提取其中的decimal值

修正后的代码

import pandas as pd
import requests as r

api = 'https://content.toto.nl/content-service/api/v1/q/event-list?startTimeFrom=2024-03-31T22%3A00%3A00Z&startTimeTo=2024-04-01T21%3A59%3A59Z&started=false&maxMarkets=10&orderMarketsBy=displayOrder&marketSortsIncluded=--%2CCS%2CDC%2CDN%2CHH%2CHL%2CMH%2CMR%2CWH&marketGroupTypesIncluded=CUSTOM_GROUP%2CDOUBLE_CHANCE%2CDRAW_NO_BET%2CMATCH_RESULT%2CMATCH_WINNER%2CMONEYLINE%2CROLLING_SPREAD%2CROLLING_TOTAL%2CSTATIC_SPREAD%2CSTATIC_TOTAL&eventSortsIncluded=MTCH&includeChildMarkets=true&prioritisePrimaryMarkets=true&includeCommentary=true&includeMedia=true&drilldownTagIds=691&excludeDrilldownTagIds=7291%2C7294%2C7300%2C7303%2C7306'
response = r.get(api)
data = response.json()

# 完整规范化outcomes数据,保留所有字段
match_results = pd.json_normalize(data, record_path=['data', 'events', 'markets', 'outcomes'])

# 过滤type为MR的行
mr_results = match_results[match_results['type'] == 'MR']

# 展开prices数组,提取decimal值
# 先把prices列展开成单独的行
mr_results_exploded = mr_results.explode('prices', ignore_index=True)
# 从展开的prices字典中提取decimal
decimal_values = mr_results_exploded['prices'].apply(lambda x: x.get('decimal'))

# 打印结果
print(decimal_values.dropna())

代码说明

  • pd.json_normalize第一次调用时保留了所有outcomes的字段,包括type和嵌套的prices数组
  • 用布尔索引直接过滤type == 'MR'的行,避免低效的循环
  • explode('prices')把每个prices数组拆成单独的行,方便后续提取decimal
  • 用apply从每个prices字典中取出decimal值,最后去掉空值(如果有的话)

内容的提问来源于stack exchange,提问作者nijhof.ngsvn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:16:16