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

如何从二进制.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:30:18