问题不同,是关于预期输出处理json的方式。抱歉浪费你的时间。
我有一个python字典对象,我试图以字符串格式返回,以便另一个函数进行字符串比较。我无法控制其他功能,所以我有责任以所要求的格式返回。
现在我有了这个 返回的myfunction(params)(json.dump(字典对象))
'{"Engineering": {"employees": 3, "employees_with_outside_friends": 2}, "HR": {"employees": 1, "employees_with_outside_friends": 1}, "Business": {"employees": 1, "employees_with_outside_friends": 1}, "Directors": {"employees": 1, "employees_with_outside_friends": 0}}'
但是我希望返回看起来像常规字符串,当我运行print(dict)时会打印出来
{"Engineering": {"employees": 3, "employees_with_outside_friends": 2}, "HR": {"employees": 1, "employees_with_outside_friends": 1}, "Business": {"employees": 1, "employees_with_outside_friends": 1}, "Directors": {"employees": 1, "employees_with_outside_friends": 0}}
示例代码:
def get_actual_output():
dict_ = dict({"Engineering": {"employees": 3, "employees_with_outside_friends": 2},"HR": {"employees": 1, "employees_with_outside_friends": 1},"Business": {"employees": 1, "employees_with_outside_friends": 1},"Directors": {"employees": 1, "employees_with_outside_friends": 0}})
return(json.dumps(dict_))
expected_output = '{"Engineering": {"employees": 3, "employees_with_outside_friends": 2},"HR": {"employees": 1, "employees_with_outside_friends": 1},"Business": {"employees": 1, "employees_with_outside_friends": 1},"Directors": {"employees": 1, "employees_with_outside_friends": 0}}'
get_actual_output() == expected_output returns False
添加更多细节:
当我打印上述函数的返回值和期望值时,这就是我得到的:
>>> actual_output
'{"Business": {"employees": 1, "employees_with_outside_friends": 1}, "Dir
ectors": {"employees": 1, "employees_with_outside_friends": 0}, "Engineer
ing": {"employees": 3, "employees_with_outside_friends": 2}, "HR": {"empl
oyees": 1, "employees_with_outside_friends": 1}}'
>>> test['expected_output']
{'Business': {'employees': 1, 'employees_with_outside_friends': 1},
'Directors': {'employees': 1, 'employees_with_outside_friends': 0},
'Engineering': {'employees': 3, 'employees_with_outside_friends': 2},
'HR': {'employees': 1, 'employees_with_outside_friends': 1}}
答案 0 :(得分:1)
您与get_actual_output() == expected_output
的示例不匹配只是因为您在某些键之前缺少空格。例如:...s": 2},"HR": {"em...
,其中实际输出为...s": 2}, "HR": {"em...
。你不能从json.dumps
获得你想要的格式,因为你在某些键之前有空格,而不是其他键。
您可以使用json.dumps(..., separators=(',', ': '))
删除所有空格,但这可能会让情况更加混乱。
理想情况下,您应该解析字符串响应并进行比较。这样,您还可以避免无法保证元素顺序的问题。
答案 1 :(得分:0)
Json与python字典表示不同,当你打印字典时,python没有使用json语法来生成字典的字符串表示,dict对象有自己的__str__实现,在调用str或者调用str时调用做一个打印(在对象上调用str)。
str(dict_)生成一个由__str__生成的字符串,并且不遵循json语法,它类似,但不相同,这是两种不同的语法。
此外,json只允许双引号用于字符串,而python允许双引号和单引号。
对json进行简单处理使其看起来像dict的python repr(比如删除/替换引号..)是一个坏主意,在处理复杂对象表示甚至浮动时会遇到问题。
如果你想要一个看起来像是通过打印dict生成的字符串的字符串,请使用str(dict_)。