0

http://www.learnpython.org/Serialization_using_JSON_and_pickle

以下是说明:

本练习的目的是打印出带有键值对 "Me" : 800 的 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

    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被定义为一个字符串(包含各种不必要的符号,如括号。事实上,我认为如果删除围绕其定义的单引号,originalJsonSalaries将是一个字典,这将是容易得多。但就目前而言,我怎样才能将"Me"和附加800到字符串并仍然保持类似字典的格式?

是的,我对编码非常陌生。我知道的唯一其他语言是 tcl。

编辑:

好的,多亏了答案,我发现我很密集,我写了这段代码:

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)

这不起作用。无论出于何种原因,原始字典键被格式化为 unicode(我不知道发生在哪里),所以当我打印出字典时,会显示“u”标志:

{u'Jane': 301, 'Me': 800, u'Alfred': 300}

我曾尝试使用dict.pop()替换键(dict("Jane") = dict.pop(u"Jane")),但这只是带来SyntaxError: can't assign to function call

我的原始解决方案是否不正确,或者这是一些烦人的格式问题以及如何解决?

4

3 回答 3

4

您链接到的页面确切说明了如何执行此操作:

为了使用 json 模块,必须首先导入它:

import json

[...]

要将 JSON 加载回数据结构,请使用“loads”方法。此方法接受一个字符串并将其转换回 json 对象数据结构:

print json.loads(json_string)

他们给了你一个字符串 ( jsonSalaries)。用来json.loads把它变成字典。

于 2013-09-27T20:28:04.253 回答
0

您的最后一个问题是一个新问题,但是......当您打印这样的字典时,您只是在使用 python 足够好的事实来以有意义的方式向您显示其变量的内容。要以您自己的格式打印字典,您需要遍历键并打印键和值:

for k in newJsonSalaries:
    print("Employee {0} makes {1}".format(k, newJsonSalaries[k]))

您的代码中还有其他问题....

在 add employee 函数中加载 JSON 很奇怪。那应该分开...

此外,在您的add_employee()函数中,您总是硬连线添加相同的值,Me800不是使用传入的nameandsalary变量,因此该行应该是:

jsonSalaries[name] = salary
于 2013-09-27T21:51:50.790 回答
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)
于 2013-11-11T08:04:50.660 回答