首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用json.dump()后,整数类型键转成字符串类型

使用json.dump()后,整数类型键转成字符串类型
EN

Stack Overflow用户
提问于 2022-08-20 10:30:50
回答 2查看 48关注 0票数 1

我有一个CSV文件,其中有两列,一列用于法语单词,一列用于英文单词:

代码语言:javascript
复制
French,English
partie,part
histoire,history
chercher,search
seulement,only
police,police

我试图将CSV数据更改为JSON,但遇到了一个错误。我的索引,我想成为一个整数,似乎是一个字符串。也尝试使用int(),但是看起来它不会修复这个问题。

如何将JSON文件中的索引值更改为整数?

代码语言:javascript
复制
import json
import pandas
data = pandas.read_csv("data/french_words.csv")
words = {int(index): {
    "French": row.French,
    "English": row.English,
    "known": None
    } for index, row in data.iterrows()
}
data.update(words)
with open("words.json", mode="w") as words_file:
    json.dump(words, words_file, indent=4)

print(words)

输出:

代码语言:javascript
复制
{
0: {'French': 'partie', 'English': 'part', 'known': None}, 
1: {'French': 'histoire', 'English': 'history', 'known': None}, 
2: {'French': 'chercher', 'English': 'search', 'known': None}, 
3: {'French': 'seulement', 'English': 'only', 'known': None}, 
4: {'French': 'police', 'English': 'police', 'known': None}, 
5: {'French': 'pensais', 'English': 'thought', 'known': None},
}  

结果包含100个键值对。我刚放了前5个。

JSON文件输出

代码语言:javascript
复制
{
    "0": {
        "French": "partie",
        "English": "part",
        "known": null
    },
    "1": {
        "French": "histoire",
        "English": "history",
        "known": null
    },
    "2": {
        "French": "chercher",
        "English": "search",
        "known": null
    },
    "3": {
        "French": "seulement",
        "English": "only",
        "known": null
    },
    "4": {
        "French": "police",
        "English": "police",
        "known": null
    },
    "5": {
        "French": "pensais",
        "English": "thought",
        "known": null
    },
}
EN

回答 2

Stack Overflow用户

发布于 2022-08-20 10:42:38

简单地说,你不能。JSON标准定义了对象属性名称使用字符串。因此,在导出时,python正在尽力生成可用的JSON (通过将整数转换为字符串)。

这方面的自然解决方案是将CSV文件拉到一个对象数组中,然后该数组将干净地导出。

票数 1
EN

Stack Overflow用户

发布于 2022-08-20 10:46:36

这是不同映射集合之间的细微差别之一,这些差异可能会咬你一口。JSON将键视为字符串;Python支持仅在类型上不同的不同键。

在Python中(显然在Lua中),映射的键(分别是字典或表)是对象引用。在Python中,它们必须是不可变类型,或者它们必须是实现__hash__方法的对象。( Lua文档建议它自动使用对象的ID作为散列/键,甚至对于可变的对象也是如此,并且依赖于字符串实习生来确保等效的字符串映射到相同的对象)。

JSON最初是一种Javascript序列化技术。(JSON表示JavaScript对象表示法。)当然,它为其映射表示法实现了语义,这与映射语义一致。

如果序列化的两端都是Python,那么最好使用泡菜。如果您真的需要将这些从JSON转换回本地Python对象,那么我想您有几个选择。首先,在字典查找失败时,您可以尝试(try: ... except: ...)将任何键转换为数字。或者,如果将代码添加到另一端(这个JSON数据的序列化程序或生成器),那么您可以让它对每个键值执行JSON序列化--提供这些键的列表。(然后Python代码将首先遍历键列表,将它们实例化/反序列化为本地Python对象.然后使用这些值访问映射之外的值)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73425924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档