如何从二进制.rpl3文件中提取嵌套JSON数据?
从二进制.rpl3文件提取嵌套JSON的可行方案
方案一:关键词定位+括号匹配提取
既然已经把二进制文件转成了字符串,且明确目标JSON的起始关键词是"game"和"result",这个方法直接可靠:
- 定位起始位置:找到
"game": {和"result": {的索引(注意大小写,根据实际文件调整)。 - 匹配闭合括号:从起始的
{开始,用计数器跟踪括号层级——遇到{计数器+1,遇到}计数器-1,当计数器归0时,当前位置就是该JSON的结束点。 - 截取有效内容:提取从起始
{到结束}之间的字符串,就是完整的JSON数据。
示例代码(Python):
def extract_target_json(raw_str, start_key): # 定位关键词起始位置 key_pos = raw_str.find(f'"{start_key}": {') if key_pos == -1: return None # 找到JSON对象的起始大括号 brace_start = raw_str.find('{', key_pos) count = 1 end_pos = brace_start + 1 # 遍历匹配闭合括号 while count > 0 and end_pos < len(raw_str): if raw_str[end_pos] == '{': count += 1 elif raw_str[end_pos] == '}': count -= 1 end_pos += 1 # 返回截取的JSON字符串 return raw_str[brace_start:end_pos] # 假设二进制转成的字符串为raw_str game_json = extract_target_json(raw_str, "game") result_json = extract_target_json(raw_str, "result")
方案二:正则表达式提取(适合结构规范的场景)
如果文件内JSON的嵌套结构没有特殊情况(比如字符串里不包含未转义的{/}),可以用递归正则匹配:
- 用
"game":\s*({(?:[^{}]|(?R))*})匹配game对应的JSON对象,同理用"result":\s*({(?:[^{}]|(?R))*})匹配result部分。 - 注意:Python的
re模块需要开启re.DOTALL模式,若JSON字符串里有转义的括号,该方法可能失效。
示例代码(Python):
import re # 编译正则模式 game_pattern = re.compile(r'"game":\s*({(?:[^{}]|(?R))*})', re.DOTALL) result_pattern = re.compile(r'"result":\s*({(?:[^{}]|(?R))*})', re.DOTALL) # 匹配目标JSON game_match = game_pattern.search(raw_str) result_match = result_pattern.search(raw_str) game_json = game_match.group(1) if game_match else None result_json = result_match.group(1) if result_match else None
方案三:二进制层面过滤有效字符
如果转成字符串后存在大量乱码,可以先在二进制阶段过滤出JSON相关的可打印字符,再转成字符串处理:
with open("target.rpl3", "rb") as f: binary_data = f.read() # 只保留JSON结构所需的字符 valid_bytes = b'{}[]",:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ \t\n' filtered_data = b''.join([byte for byte in binary_data if byte in valid_bytes]) raw_str = filtered_data.decode('ascii', errors='ignore') # 再用方案一或二提取JSON
后续解析
提取到JSON字符串后,直接用json.loads()转成可操作的对象:
import json if game_json: game_data = json.loads(game_json) if result_json: result_data = json.loads(result_json)
内容的提问来源于stack exchange,提问作者Lynchie
相关产品推荐
相关产品推荐

