保存Python字典时,json会向每个条目添加一个字符

保存Python字典时,json会向每个条目添加一个字符,python,json,file,dictionary,Python,Json,File,Dictionary,我对json有一些奇怪的问题。下面的程序打开一个文件,导入词典,添加条目,然后再次保存词典。当程序第二次运行时,字典的每个键和每个值前面都会添加一个字母“u”。这些不是累积的;多次运行程序不会添加多个“u” 顺便说一句,一个不相关的特性是:除非在写模式下关闭并重新打开文件,否则会收到错误消息。我不知道为什么会这样 u代表unicode“字符串”。有关更详细的答案,请参见此处 u代表unicode“字符串”。有关更详细的答案,请参见此处 好的-谢谢。这似乎有效: import json file1

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

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

u代表unicode“字符串”。有关更详细的答案,请参见此处 u代表unicode“字符串”。有关更详细的答案,请参见此处
好的-谢谢。这似乎有效:

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()

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

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()

使用dumps(将其作为字符串而不是对象转储),u“”前缀会告诉您它是unicode数据。顺便说一句,存储的文件具有正确的字典。添加必须发生在json.load()进程中。@HGNY:添加发生在
打印
中,实际上,特别是在
unicode中。从
dict.\uuuuu repr\uuu
调用。额外的
u'
不会影响数据或其处理方式,只是加载方式(unicode字符串)与常规字符串相比。啊哈——这样我就可以继续使用原始代码了!使用dumps(将其作为字符串而不是对象转储),u“”前缀会告诉您它是unicode数据。顺便说一句,存储的文件具有正确的字典。添加必须发生在json.load()进程中。@HGNY:添加发生在
打印
中,实际上,特别是在
unicode中。从
dict.\uuuuu repr\uuu
调用。额外的
u'
不会影响数据或其处理方式,只是加载方式(unicode字符串)与常规字符串相比。啊哈——这样我就可以继续使用原始代码了!