我有一个 CSV,其中包含不同语言的网站文本。
CSV 示例:
Group,Key,EN,NL
Global,yes,yes,ja
Global,no,no,neen
Menu,openMenu,Open menu,Open menu
Menu,signUp,Sign up,Registreer
我想轻松地将 CSV 转换为每种语言的单独 JSON 文件。对于荷兰语 (NL),我需要这样的 JSON:
{
"global": {
"yes": "ja",
"no": "nee"
},
"menu": {
"openMenu": "Open menu",
"signUp": "Registreer"
}
}
我正在寻找一种解决方案,唯一的手动工作就是更改我需要的语言输出(在本例中为 EN 或 NL)。
我尝试使用 JSON 转换器工具编写自定义模板,但要么得到重复的键(组值):
{
"Global": {
"yes":"yes"
},
"Global": {
"no":"no"
},
"Menu": {
"openMenu":"Open menu"
},
"Menu": {
"signUp":"Sign up"
}
}
或者当我使用他们的“CVS to keyed JSON”模板时,对象结构并不完全符合要求:
{
"Global": [
{
"Key": "yes",
"EN": "yes",
"NL": "ja"
},
{
"Key": "no",
"EN": "no",
"NL": "neen"
}
],
"Menu": [
{
"Key": "openMenu",
"EN": "Open menu",
"NL": "Open menu"
},
{
"Key": "signUp",
"EN": "Sign up",
"NL": "Registreer"
}
]
}
然后我尝试研究 JMESPath 选项,但我不想手动输入每个键,因为实际上 CSV 会更大。我不确定 JMESPath 在这种情况下是否可行;我还没想明白。
我发现的类似问题的大多数解决方案都是使用 Python。公平地说,我在 Python 方面的经验为零,但如果这是一个好的解决方案,我愿意进一步研究!
将原始 CSV 转换为我需要的 JSON 文件,或者从转换器工具进一步将我的 JSON 文件格式化为我需要的 JSON 格式的最佳方法是什么?
这是一个简单的 Python 代码,用于为每种语言创建单独的 JSON 文件。
创建一个文件,例如,将其命名为
csv-to-json.py
:
import csv
import json
def csv_to_json(csv_file):
data = {}
with open(csv_file, mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
group = row['Group'].lower()
key = row['Key']
for lang in row.keys():
if lang not in ['Group', 'Key']:
if lang not in data:
data[lang] = {}
if group not in data[lang]:
data[lang][group] = {}
data[lang][group][key] = row[lang]
for lang, lang_data in data.items():
output_file = f"{lang}.json"
with open(output_file, mode='w', encoding='utf-8') as f:
json.dump(lang_data, f, indent=4, ensure_ascii=False)
if __name__ == "__main__":
csv_file = "your-csv-file.csv"
csv_to_json(csv_file)
您可以通过执行
python3 csv-to-json.py
在终端中运行代码
确保将 your-csv-file.csv
更改为您的 CSV 文件名。