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

如何处理非理想JSON?VDF转JSON格式优化技术问询

解决VDF转JSON格式不理想的问题

看起来你在处理Valve专有KeyValue格式的.vdf文件转JSON时,遇到了简易转换器输出格式不佳的问题——比如你给出的示例里JSON输出还出现了截断,而且数字键的处理可能也不符合你的预期。下面给你几个实用的解决方案:

方案1:使用成熟的VDF解析库(推荐)

很多编程语言都有专门针对VDF格式的成熟解析库,能完美处理嵌套结构、数字键等场景,输出规范完整的JSON。以Python为例:

首先安装vdf库:

pip install vdf

然后用以下代码完成转换:

import vdf
import json

# 读取VDF文件
with open('your_library.vdf', 'r', encoding='utf-8') as f:
    vdf_content = vdf.load(f)

# 转换为格式化的JSON并输出
formatted_json = json.dumps(vdf_content, indent=4)
print(formatted_json)

针对你给出的示例VDF输入,这段代码会输出完整且结构规范的JSON:

{
    "LibraryFolders": {
        "TimeNextStatsReport": "1523464730",
        "ContentStatsID": "8627456721266182211",
        "1": "G:\\Steam"
    }
}

方案2:手动修正现有转换器的输出

如果不想更换工具,可以针对现有转换器的问题做针对性调整:

  1. 修复截断问题:检查转换器是否有文件读取长度限制,确保它完整读取整个VDF文件内容;
  2. 自定义结构调整:如果你希望把数字键(比如示例中的"1")整理为数组而非字符串键,可以写个小脚本处理:
import json

# 假设你已经修复了截断后的JSON内容
raw_json = '''
{
    "LibraryFolders": {
        "TimeNextStatsReport": "1523464730",
        "ContentStatsID": "8627456721266182211",
        "1": "G:\\\\Steam"
    }
}
'''

data = json.loads(raw_json)
library_data = data["LibraryFolders"]

# 分离数字键和普通键,把数字键对应的值整理为数组
folders = []
metadata = {}
for key, value in library_data.items():
    if key.isdigit():
        folders.append(value)
    else:
        metadata[key] = value

metadata["folders"] = folders
data["LibraryFolders"] = metadata

# 输出调整后的JSON
print(json.dumps(data, indent=4))

调整后的输出会变成更贴合使用习惯的结构:

{
    "LibraryFolders": {
        "TimeNextStatsReport": "1523464730",
        "ContentStatsID": "8627456721266182211",
        "folders": [
            "G:\\Steam"
        ]
    }
}

方案3:自定义轻量VDF解析器(按需定制)

如果需要完全自定义转换逻辑,可以自己实现一个简单的VDF解析器,核心是处理VDF的键值对和嵌套大括号结构。以下是Python的一个轻量实现:

import re
import json

def parse_vdf(vdf_string):
    # 移除注释和多余空白字符
    cleaned_vdf = re.sub(r'//.*', '', vdf_string)
    cleaned_vdf = re.sub(r'\s+', ' ', cleaned_vdf).strip()
    
    stack = [{}]
    current_key = None
    
    # 提取所有键、值和大括号标记
    tokens = re.findall(r'"([^"]+)"|\{|\}', cleaned_vdf)
    
    for token in tokens:
        if token == '{':
            # 进入嵌套结构
            if current_key is not None:
                nested_dict = {}
                stack[-1][current_key] = nested_dict
                stack.append(nested_dict)
                current_key = None
        elif token == '}':
            # 退出嵌套结构
            stack.pop()
        else:
            # 处理键或值
            if current_key is None:
                current_key = token
            else:
                stack[-1][current_key] = token
                current_key = None
    return stack[0]

# 测试示例VDF
sample_vdf = '''
"LibraryFolders" {
    "TimeNextStatsReport" "1523464730"
    "ContentStatsID" "8627456721266182211"
    "1" "G:\\Steam"
}
'''

parsed_result = parse_vdf(sample_vdf)
print(json.dumps(parsed_result, indent=4))

这个解析器能准确处理VDF的结构,输出符合预期的JSON,你可以根据自己的需求进一步修改逻辑。

内容的提问来源于stack exchange,提问作者user7937949

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:34:56