http://www.learnpython.org/Serialization_using_JSON_and_pickle
以下是说明:
本练习的目的是打印带有键值对“Me”的JSON字符串:800添加到它。
以下是我们应该修改的起始代码。
#Exercise fix this function, so it adds the given name and salary pair to the json it returns
def add_employee(jsonSalaries, name, salary):
# Add your code here
return jsonSalaries
#Test code - shouldn't need to be modified
originalJsonSalaries = '{"Alfred" : 300, "Jane" : 301 }'
newJsonSalaries = add_employee(originalJsonSalaries, "Me", 800)
print(newJsonSalaries)
我完全迷失了。 JSON课程充其量只是简短的。我似乎在这里遇到的问题是orginalJsonSalaries
被定义为一个字符串(包含所有类型的不必要的符号,如括号。事实上,我认为如果删除了围绕其定义的单引号,{{1将是一个字典,这将更容易。但就目前而言,如何将originalJsonSalaries
和"Me"
附加到字符串并仍然保持类字典格式?
是的,我对编码非常陌生。我知道的唯一其他语言是tcl。
编辑:
好的,感谢答案,我发现自己很密集,我写了这段代码:
800
这不起作用。无论出于何种原因,原始字典键被格式化为unicode(我不知道发生了什么),所以当我打印出字典时,会显示“u”标志:
import json
#Exercise fix this function, so it adds the given name and salary pair to the json it returns
def add_employee(jsonSalaries, name, salary):
# Add your code here
jsonSalaries = json.loads(jsonSalaries)
jsonSalaries["Me"] = 800
return jsonSalaries
#Test code - shouldn't need to be modified
originalJsonSalaries = '{"Alfred" : 300, "Jane" : 301 }'
newJsonSalaries = add_employee(originalJsonSalaries, "Me", 800)
print(newJsonSalaries)
我尝试使用{u'Jane': 301, 'Me': 800, u'Alfred': 300}
替换密钥(dict.pop()
),但这只会导致dict("Jane") = dict.pop(u"Jane")
我的原始解决方案是否不正确,或者这是一些恼人的格式问题以及如何解决它?
答案 0 :(得分:4)
page you linked to确切地说明了如何执行此操作:
要使用json模块,必须先导入它:
import json
[...]
要将JSON加载回数据结构,请使用“loads”方法。此方法接受一个字符串并将其转回json对象数据结构:
print json.loads(json_string)
他们给了你一个字符串(jsonSalaries
)。使用json.loads
将其变为字典。
答案 1 :(得分:0)
你的最后一个问题是一个新问题,但是...当你打印一个类似的字典时,你只是使用python足够好的事实,以有意义的方式向你展示其变量的内容。要以您自己的格式打印字典,您需要遍历键并打印键和值:
for k in newJsonSalaries:
print("Employee {0} makes {1}".format(k, newJsonSalaries[k]))
您的代码中还有其他问题......
在添加员工功能中加载JSON很奇怪。那应该是分开的......
此外,在您的add_employee()
功能中,您始终需要添加Me
和800
的相同值,而不是使用name
和salary
变量传入,所以该行应该是:
jsonSalaries[name] = salary
答案 2 :(得分:0)
使用此:
import json
def add_employee(jsonSalaries, name, salary):
# Add your code here
jsonSalaries = json.loads(jsonSalaries)
jsonSalaries[name] = salary
jsonSalaries = json.dumps(jsonSalaries)
return jsonSalaries
#Test code - shouldn't need to be modified
originalJsonSalaries = '{"Alfred" : 300, "Jane" : 301 }'
newJsonSalaries = add_employee(originalJsonSalaries, "Me", 800)
print(newJsonSalaries)
在返回jsonSalaries之前添加:
jsonSalaries = json.dumps(jsonSalaries)