C#解析嵌套JSON数组取值问题求助
解决JSON解析失败的问题
嘿,我完全懂花几小时折腾JSON却连解析都过不了的崩溃感!先帮你梳理下问题,再给你可行的解决方案:
先看你提供的JSON核心问题
你贴的这段JSON是截断不完整的,比如"tvdb"...这里没写完,最后也没有闭合的}和],这直接导致解析器无法识别完整结构,肯定会失败。我先帮你补全成一段有效的JSON(根据常见的Trakt API返回格式补全了缺失的内容):
[ { "first_aired": "2018-03-03T01:00:00.000Z", "episode": { "season": 3, "number": 13, "title": "Warning Shot", "ids": { "trakt": 2814272, "tvdb": 6445735, "imdb": "tt7462514", "tmdb": 1429184, "tvrage": 0 } }, "show": { "title": "Blindspot", "year": 2015, "ids": { "trakt": 98980, "slug": "blindspot", "tvdb": 281662, "imdb": "tt4532368", "tmdb": 60735, "tvrage": 35385 } } } ]
接下来是解析和取值的示例
我给你写了两种常用语言的解析代码,你可以直接参考:
Python 解析示例
import json # 把修复后的JSON字符串(或者你获取到的完整JSON)放进这里 json_content = ''' [ { "first_aired": "2018-03-03T01:00:00.000Z", "episode": { "season": 3, "number": 13, "title": "Warning Shot", "ids": { "trakt": 2814272, "tvdb": 6445735, "imdb": "tt7462514", "tmdb": 1429184, "tvrage": 0 } }, "show": { "title": "Blindspot", "year": 2015, "ids": { "trakt": 98980, "slug": "blindspot", "tvdb": 281662, "imdb": "tt4532368", "tmdb": 60735, "tvrage": 35385 } } } ] ''' try: # 解析JSON成Python字典 parsed_data = json.loads(json_content) # 示例取值:获取剧集标题 episode_title = parsed_data[0]["episode"]["title"] print(f"拿到剧集标题啦:{episode_title}") # 示例取值:获取剧集的Trakt ID show_trakt_id = parsed_data[0]["show"]["ids"]["trakt"] print(f"剧集的Trakt ID:{show_trakt_id}") except json.JSONDecodeError as e: print(f"解析出错啦,原因是:{e}")
JavaScript 解析示例
// 完整的JSON字符串 const jsonContent = ` [ { "first_aired": "2018-03-03T01:00:00.000Z", "episode": { "season": 3, "number": 13, "title": "Warning Shot", "ids": { "trakt": 2814272, "tvdb": 6445735, "imdb": "tt7462514", "tmdb": 1429184, "tvrage": 0 } }, "show": { "title": "Blindspot", "year": 2015, "ids": { "trakt": 98980, "slug": "blindspot", "tvdb": 281662, "imdb": "tt4532368", "tmdb": 60735, "tvrage": 35385 } } } ] `; try { // 解析JSON成JS对象 const parsedData = JSON.parse(jsonContent); // 示例取值:获取播出时间 const firstAired = parsedData[0].first_aired; console.log(`剧集首播时间:${firstAired}`); // 示例取值:获取集数 const episodeNumber = parsedData[0].episode.number; console.log(`这是第${episodeNumber}集`); } catch (error) { console.error(`解析失败:${error.message}`); }
后续排查小技巧
- 先确认JSON完整性:如果是从接口获取的,检查请求是否返回了完整内容;如果是本地文件,看看文件有没有被截断。
- 利用解析错误提示:不管用什么语言,解析失败时都会给出错误位置和原因,比如“第X行第Y列缺少引号”,跟着提示找问题就行。
- 先校验JSON结构:如果不确定JSON是否有效,可以手动检查引号、括号是否配对,确保没有多余或缺失的逗号。
内容的提问来源于stack exchange,提问作者ViNSaNiTY
相关产品推荐
相关产品推荐

