首页 > 解决方案 > 加入两个 JSON 文件并创建一个新文件

问题描述

我找不到所有国家/地区代码及其名称以不同语言打包在一起的查找表,因此我必须创建自己的文件。

让我们从两种语言开始,德语和英语。

德语 JSON 文件示例:

[{"id":4,"name":"Afghanistan","alpha2":"af","alpha3":"afg"},
{"id":818,"name":"Ägypten","alpha2":"eg","alpha3":"egy"},
{"id":248,"name":"Åland","alpha2":"ax","alpha3":"ala"},
{"id":8,"name":"Albanien","alpha2":"al","alpha3":"alb"},
{"id":12,"name":"Algerien","alpha2":"dz","alpha3":"dza"}]

英文 JSON 文件示例:

[{"id":4,"name":"Afghanistan","alpha2":"af","alpha3":"afg"},
{"id":248,"name":"Åland Islands","alpha2":"ax","alpha3":"ala"},
{"id":8,"name":"Albania","alpha2":"al","alpha3":"alb"},
{"id":12,"name":"Algeria","alpha2":"dz","alpha3":"dza"},
{"id":16,"name":"American Samoa","alpha2":"as","alpha3":"asm"},

我可以像这样读取两个文件

with open('german.json') as fd:
    ger = json.load(fd)

由于我们有国家/地区的唯一 ID,因此我们可以将它们连接在一起。结果应该是这样的

[{"id":4,"ger":"Afghanistan","eng":"Afghanistan","alpha2":"af","alpha3":"afg"},
{"id":818,"ger":"Ägypten","eng":"Egypt","alpha2":"eg","alpha3":"egy"},
{"id":248,"ger":"Åland","eng":"Åland Islands","alpha2":"ax","alpha3":"ala"},
{"id":8,"ger":"Albanien","eng":"Albania","alpha2":"al","alpha3":"alb"},
{"id":12,"ger":"Algerien","eng":"Algeria","alpha2":"dz","alpha3":"dza"}]

考虑到将来可以添加其他语言,将列表连接在一起的最有效方法是什么?

标签: pythonjsondictionary

解决方案


正如评论中所建议的,将文件加载到数据框中并将它们合并在一起更容易。一个可行的解决方案是

german = pd.read_json('world.json')
english = pd.read_json('world_en.json')

lookup = pd.merge(german, english, on='id')
lookup = lookup.drop(columns=['alpha2_y', 'alpha3_y'])
lookup = lookup.rename(columns={'name_x': 'de', 'name_y': 'en', 'alpha2_x': 'alpha2', 'alpha3_x': 'alpha3'})
lookup = lookup[['id', 'de', 'en', 'alpha2', 'alpha3']]

lookup.to_json('lookup.json', orient='records')

此解决方案的唯一缺点是我们必须使用更多语言删除和重命名越来越多的列。


推荐阅读