使用JSON坚持使用learnpython.org练习

时间:2013-09-27 20:24:53

标签: python

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

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

3 个答案:

答案 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()功能中,您始终需要添加Me800的相同值,而不是使用namesalary变量传入,所以该行应该是:

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)