保存Python字典时,json为每个条目添加一个字符[重复]

Posted

技术标签:

【中文标题】保存Python字典时,json为每个条目添加一个字符[重复]【英文标题】:When saving a Python dictionary, json adds a character to every entry [duplicate] 【发布时间】:2016-05-10 10:36:02 【问题描述】:

我在使用 json 时遇到了奇怪的问题。下面的程序打开一个文件,导入一个字典,添加条目,然后再次保存字典。当程序第二次运行时,在字典的每个键和每个值前面都添加了一个字母“u”。这些不是累积的;多次运行程序不会添加多个“u”。

import json
file1 = open('phonebook.txt', 'r+')
phonebook = json.load(file1)
print phonebook
while(True):
    name = raw_input("Name?")
    if name == "":
        break
    number = raw_input("Number?")
    phonebook[name] = number
file1.close()
file1 = open('phonebook.txt', 'w')
json.dump(phonebook, file1)
print phonebook

顺便说一句,一个不相关的特性:除非我以写入模式关闭并重新打开文件,否则我会收到错误消息。我不知道为什么会这样。

【问题讨论】:

使用转储(将其转储为字符串,而不是对象)并且 u'' 前缀告诉您它是 unicode 数据。 顺便说一下,存储的文件有正确的字典。添加必须发生在 json.load() 过程中。 @HGNY:添加发生在print,实际上,特别是在unicode.__repr__,它是从dict.__repr__调用的。 额外的u'' 不会影响数据或数据的处理方式,它只是加载(unicode 字符串)与常规字符串的方式。 啊哈——所以我可以继续使用原始代码! 【参考方案1】:

u 代表 unicode “字符串”。更详细的答案看这里 What does the 'u' symbol mean in front of string values?

【讨论】:

【参考方案2】:

好的 - 谢谢。这似乎有效:

import json
file1 = open('phonebook.txt', 'r')
phonebook = eval(file1.read())
while(True):
    name = raw_input("Name?")
    if name == "":
        break
    number = raw_input("Number?")
    phonebook[name] = number
file1.close()
file1 = open('phonebook.txt', 'w')
file1.write(json.dumps(phonebook))
file1.close()

【讨论】:

以上是关于保存Python字典时,json为每个条目添加一个字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python中添加字典条目时逗号的作用

如何将json字符串转换为字典并在键中保存顺序? [复制]

AFNetworking 将 JSON 数组发布为多个单条目字典

如何将 Python 字典保存为 NodeJS 字典? [复制]

如何将 Python 字典保存为 NodeJS 字典? [复制]

将列表条目作为值更新为嵌套字典