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

使用Json.NET反序列化根对象键未知的Steam API返回JSON

处理Steam API动态根键JSON的反序列化方案

这问题我之前帮不少开发者解决过——Steam API返回的这种顶层动态键确实有点坑,不过处理起来其实挺简单的,核心思路就是绕开那个未知的根键,直接提取它对应的游戏信息对象就行。下面分几种常用编程语言给你具体方案:

C#(使用Newtonsoft.Json)

首先定义对应游戏信息的实体类,匹配JSON里的结构:

public class GameInfo
{
    public bool success { get; set; }
    public GameData data { get; set; }
}

public class GameData
{
    public string type { get; set; }
    public string name { get; set; }
    public int steam_appid { get; set; }
    public int required_age { get; set; }
    public bool is_free { get; set; }
}

然后用字典来接收整个JSON结构,再提取值:

var json = "{ \"578080\": { \"success\": true, \"data\": { \"type\": \"game\", \"name\": \"PLAYERUNKNOWN'S BATTLEGROUNDS\", \"steam_appid\": 578080, \"required_age\": 0, \"is_free\": false } } }";
// 反序列化为字典,键是游戏ID字符串,值是GameInfo对象
var gameDict = JsonConvert.DeserializeObject<Dictionary<string, GameInfo>>(json);
// 提取唯一的游戏信息(单个游戏查询只会有一个键值对)
var targetGameInfo = gameDict.Values.First();

如果你不想用字典,也可以直接解析JSON对象后提取值:

var jObject = JObject.Parse(json);
var targetGameInfo = jObject.Values().First().ToObject<GameInfo>();

Python

Python用标准库就能轻松处理,不需要额外依赖:

import json

json_str = '''{ "578080": { "success": true, "data": { "type": "game", "name": "PLAYERUNKNOWN'S BATTLEGROUNDS", "steam_appid": 578080, "required_age": 0, "is_free": false } } }'''
# 加载JSON为字典
game_data = json.loads(json_str)
# 提取字典中的第一个值(即游戏信息)
game_info = next(iter(game_data.values()))

# 之后就可以正常访问字段了
print(game_info["success"])
print(game_info["data"]["name"])

JavaScript/TypeScript

JS里处理这种动态键最便捷,用Object.values()直接提取值:

const jsonStr = `{ "578080": { "success": true, "data": { "type": "game", "name": "PLAYERUNKNOWN'S BATTLEGROUNDS", "steam_appid": 578080, "required_age": 0, "is_free": false } } }`;
const gameData = JSON.parse(jsonStr);
// 提取顶层对象的所有值,取第一个元素
const gameInfo = Object.values(gameData)[0];

// 访问属性示例
console.log(gameInfo.success);
console.log(gameInfo.data.name);
核心思路总结

本质上不管用哪种语言,核心都是把顶层的动态键值对当成集合(字典、对象)处理,然后直接提取对应的值,而不是试图把动态的根键映射到某个固定的类属性上——毕竟这个键是随查询的游戏ID变化的,没法提前定义。

内容的提问来源于stack exchange,提问作者Sean O'Neil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:21:43