CSV 到嵌套 JSON 对象

问题描述 投票:0回答:1

我有一个 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 format jmespath
1个回答
0
投票

这是一个简单的 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 文件名。

© www.soinside.com 2019 - 2024. All rights reserved.