全站通知:
模块:GiftTastes/Data/doc
刷
历
编
< 模块:GiftTastes | Data
跳到导航
跳到搜索
当前模块的数据用于模板:GiftsByItem,自动生成物品的送礼表格。
当前模块的数据通过 SummerFleur 编写的模组 GetNPCGiftTastes 导出。
导出 json 后,使用以下 Python 脚本将数据转换为 Lua Table,即可置入当前页面。
import json
import os
from pathlib import Path
def json_to_lua_table(obj, indent=0, is_key=False, top_level=False):
"""
将Python对象转换为Lua表格字符串
Args:
obj: 要转换的Python对象
indent: 当前缩进级别
is_key: 是否为键
top_level: 是否为顶层表格
Returns:
转换后的Lua表格字符串
"""
indent_str = " " * indent
if isinstance(obj, dict):
if not obj: # 空字典
return "{}"
# 对于顶层表格,保持格式化以提高可读性
if top_level:
lines = []
lines.append("return {")
for i, (k, v) in enumerate(obj.items()):
# 使用中括号形式的键,确保中文键正确
key = f'["{k}"]'
value = json_to_lua_table(v, indent + 1, top_level=False)
# 添加逗号,除了最后一个元素
comma = "," if i < len(obj) - 1 else ""
lines.append(f"{indent_str} {key} = {value}{comma}")
lines.append(f"{indent_str}}}")
return "\n".join(lines)
else:
# 对于非顶层表格,使用更紧凑的格式
parts = []
parts.append("{")
for i, (k, v) in enumerate(obj.items()):
key = f'["{k}"]'
value = json_to_lua_table(v, 0, top_level=False) # 不增加缩进
comma = "," if i < len(obj) - 1 else ""
parts.append(f"{key}={value}{comma}")
parts.append("}")
return "".join(parts)
elif isinstance(obj, list):
if not obj: # 空列表
return "{}"
# 检查列表是否只包含简单字符串,如果是则使用紧凑格式
if all(isinstance(item, str) for item in obj):
items = [f'"{item.replace("\\", "\\\\").replace('"', '\\"')}"' for item in obj]
return "{" + ",".join(items) + "}"
else:
# 对于复杂列表,保持一定的格式
parts = []
parts.append("{")
for i, item in enumerate(obj):
value = json_to_lua_table(item, 0) # 不增加缩进
comma = "," if i < len(obj) - 1 else ""
parts.append(f"{value}{comma}")
parts.append("}")
return "".join(parts)
elif isinstance(obj, str):
# 对字符串进行转义
escaped = obj.replace('\\', '\\\\').replace('"', '\\"')
return f'"{escaped}"'
elif obj is None:
return "nil"
elif isinstance(obj, bool):
return "true" if obj else "false"
else: # 数字等其他类型
return str(obj)
def convert_json_file_to_lua(json_file_path, lua_file_path=None):
"""
将JSON文件转换为Lua文件
Args:
json_file_path: JSON文件路径
lua_file_path: 输出Lua文件路径,如果为None则使用相同文件名,扩展名改为.lua
Returns:
输出Lua文件的路径
"""
if lua_file_path is None:
lua_file_path = str(Path(json_file_path).with_suffix('.lua'))
with open(json_file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
# 转换英文键名为中文键名
converted_data = {}
key_mapping = {
'Love': '最爱',
'Like': '喜欢',
'Neutral': '一般',
'Dislike': '不喜欢',
'Hate': '讨厌'
}
for item_name, tastes in data.items():
converted_tastes = {}
for eng_key, npc_list in tastes.items():
chinese_key = key_mapping.get(eng_key, eng_key)
converted_tastes[chinese_key] = npc_list
converted_data[item_name] = converted_tastes
lua_content = json_to_lua_table(converted_data, top_level=True)
with open(lua_file_path, 'w', encoding='utf-8') as f:
f.write(lua_content)
return lua_file_path
if __name__ == "__main__":
# 获取当前文件所在目录
json_file_path = r"GiftTastes.json"
lua_file_path = r"GiftTastes.lua"
# 确保输出目录存在
os.makedirs(os.path.dirname(lua_file_path), exist_ok=True)
# 转换文件
output_path = convert_json_file_to_lua(json_file_path, lua_file_path)
print(f"转换完成!输出文件路径:{output_path}")