为什么json.loads()返回一个字符串?这是我的代码:
$searchResultsArray = SearchResult
::getBySourceId($next_sourceId['source_id'])
->select( 'field', 'value' )
->get()
->mapWithKeys(function ($item) {
return [$item['field'] => $item['value']];
})
->all();
输出:
import json
d = """{
"reference": "123432",
"business_date": "2019-06-18",
"final_price": 40,
"products": [
{
"quantity": 4,
"original_price": 10,
"final_price": 40,
}
]
}"""
j = json.loads(json.dumps(d))
print(type(j))
它不返回json对象吗?这里需要什么更改?
答案 0 :(得分:3)
两点:
products
键中有一个错字:"final_price": 40,
应该是"final_price": 40
(不带逗号)j
应该是json.loads(d)
输出
dict
编辑
本文Can you use a trailing comma in a JSON object?
解释了为什么无法在json对象中使用逗号结尾的原因很遗憾,JSON规范不允许使用逗号结尾。有几种浏览器可以使用它,但是通常您需要担心所有浏览器。
答案 1 :(得分:1)
ast.literal_eval :安全地评估表达式节点或包含Python文字或容器显示的字符串。提供的字符串或节点只能由以下Python文字结构组成:字符串,字节,数字,元组,列表,字典,集合,布尔值,无,字节和集合。 more details
import ast
d = """{
"reference": "123432",
"business_date": "2019-06-18",
"final_price": 40,
"products": [
{
"quantity": 4,
"original_price": 10,
"final_price": 40,
}
]
}"""
data = ast.literal_eval(d)
print(data)
print(type(data))
O / P:
{'reference': '123432', 'business_date': '2019-06-18', 'final_price': 40, 'products': [{'quantity': 4, 'original_price': 10, 'final_price': 40}]}
<class 'dict'>
答案 2 :(得分:1)
在您的代码中,d
应该是JSON字符串。如果是这样,那么您就不需要在加载它之前将其转储。
当我删除字符串引号时,这意味着json.dumps
调用正在处理非字符串的字典,一切似乎都很好:
import json
d = {
"reference": "123432",
"business_date": "2019-06-18",
"final_price": 40,
"products": [
{
"quantity": 4,
"original_price": 10,
"final_price": 40,
}
]
}
j = json.loads(json.dumps(d))
print(type(j))
打印出
<class 'dict'>
但是请注意,尝试将json.loads
应用于现有字符串会产生错误,因为JSON比Python宽容度小,并且不允许在列表和字典末尾悬挂逗号(请参见{ {1}}元素定义)。
答案 3 :(得分:1)
1)。 d
和j
的类型将保持不变。
import json
d = """{
"reference": "123432",
"business_date": "2019-06-18",
"final_price": 40,
"products": [
{
"quantity": 4,
"original_price": 10,
"final_price": 40,
}
]
}"""
print(type(d))
j = json.loads(json.dumps(d))
print(type(j))
2)。现在,两者都具有Dictionary类型:-
import json
d = {
"reference": "123432",
"business_date": "2019-06-18",
"final_price": 40,
"products": [
{
"quantity": 4,
"original_price": 10,
"final_price": 40,
}
]
}
print(type(d))
j = json.loads(json.dumps(d))
print(type(j))
这就是我们使用json
格式的原因。
希望对您有帮助。