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

游戏物品JSON格式转换求助:拆分嵌套附魔配方

游戏物品JSON数据格式转换方案

问题背景

手头有一份大型游戏物品JSON文件,存在两个核心问题导致数据难以导入Excel/Google Sheets使用:

  1. craftresource字段格式不统一:部分是单个对象,部分是最多4个元素的数组
  2. enchantments中的附魔等级嵌套在原物品里,需要拆分为独立的物品条目,唯一名称格式为原名称@附魔等级(比如T3_MEAL_SOUP@1)

解决方案:Python脚本处理

Excel和Google Sheets的内置工具难以处理这种复杂的动态结构,用Python脚本是最灵活的方式,以下是现成的处理脚本,步骤简单:

脚本代码

import json

def process_craftresource(resource):
    # 统一craftresource格式:数组转带序号的键值对,单个对象直接保留
    if isinstance(resource, list):
        processed = {}
        for idx, res in enumerate(resource):
            if idx == 0:
                processed["@uniquename"] = res["@uniquename"]
                processed["@count"] = res["@count"]
            else:
                processed[f"@uniquename{idx+1}"] = res["@uniquename"]
                processed[f"@count{idx+1}"] = res["@count"]
        return processed
    else:
        return resource

def main():
    # 读取本地原始JSON文件(替换为你的文件路径)
    with open("Food_Formatted.json", "r", encoding="utf-8") as f:
        items = json.load(f)
    
    final_items = []
    
    for item in items:
        # 1. 处理基础物品(无附魔)
        base_item = item.copy()
        # 统一基础物品的craftresource格式
        if "craftingrequirements" in base_item:
            base_item["craftingrequirements"]["craftresource"] = process_craftresource(
                base_item["craftingrequirements"]["craftresource"]
            )
        final_items.append(base_item)
        
        # 2. 拆分附魔等级为独立物品
        if "enchantments" in item and "enchantment" in item["enchantments"]:
            for enchant in item["enchantments"]["enchantment"]:
                enchant_item = item.copy()
                # 修改唯一名称
                level = enchant["@enchantmentlevel"]
                enchant_item["@uniquename"] = f"{item['@uniquename']}@{level}"
                # 替换为附魔对应的制作要求
                enchant_item["craftingrequirements"] = enchant["craftingrequirements"]
                # 统一附魔物品的craftresource格式
                enchant_item["craftingrequirements"]["craftresource"] = process_craftresource(
                    enchant_item["craftingrequirements"]["craftresource"]
                )
                # 删除冗余的enchantments字段
                del enchant_item["enchantments"]
                final_items.append(enchant_item)
    
    # 导出处理后的JSON文件
    with open("Processed_Food.json", "w", encoding="utf-8") as f:
        json.dump(final_items, f, indent=4, ensure_ascii=False)

if __name__ == "__main__":
    main()

使用步骤

  1. 把原始JSON文件保存为Food_Formatted.json,和脚本放在同一文件夹
  2. 安装Python(官网下载安装即可,勾选"Add Python to PATH"选项)
  3. 双击运行脚本,会生成Processed_Food.json,里面就是处理好的数据:
    • 每个附魔等级都成为独立的物品条目
    • 所有craftresource都统一为单对象格式,数组元素会变成@uniquename1、@count1这类带序号的键值对
    • 唯一名称自动按原名称@等级格式生成

替代方案:在线工具(进阶)

如果不想装Python,也可以用jq工具处理,命令如下(需要先安装jq):

jq 'def process_res: if type == "array" then reduce .[] as $item ({}; . + (if ($index + 1) == 1 then {"@uniquename": $item."@uniquename", "@count": $item."@count"} else {"@uniquename\($index + 1)": $item."@uniquename", "@count\($index + 1)": $item."@count"} end)) else . end; .[] | .craftingrequirements.craftresource |= process_res | . as $base | [$base] + (.enchantments.enchantment[] | $base * {"@uniquename": ($base."@uniquename" + "@" + ."@enchantmentlevel"), "craftingrequirements": .craftingrequirements, "enchantments": null} | .craftingrequirements.craftresource |= process_res)' Food_Formatted.json > Processed_Food.json

但这个命令对新手不太友好,优先推荐Python脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:14:55