将“ true”(JSON)转换为等效于Python的“ True”
我最近使用的Train status API(has_arrived,has_departed)
在JSON对象中添加了两个额外的键值对,这导致我的脚本崩溃。
这是字典:
{"response_code": 200,
"train_number": "12229",
"position": "at Source",
"route": [
{
"no": 1,
"has_arrived": false,
"has_departed": false,
"scharr": "Source",
"scharr_date": "15 Nov 2015",
"actarr_date": "15 Nov 2015",
"station": "LKO",
"actdep": "22:15",
"schdep": "22:15",
"actarr": "00:00",
"distance": "0",
"day": 0
},
{
"actdep": "23:40",
"scharr": "23:38",
"schdep": "23:40",
"actarr": "23:38",
"no": 2,
"has_departed": false,
"scharr_date": "15 Nov 2015",
"has_arrived": false,
"station": "HRI",
"distance": "101",
"actarr_date": "15 Nov 2015",
"day": 0
}
]
}
毫不奇怪,我得到了以下错误:
Traceback (most recent call last): File "<stdin>", line 1, in <module>
NameError: name 'false' is not defined
如果我没记错的话,我认为这是因为JSON响应中的布尔值是false
/,true
而Python可以识别False
/
True
。有什么办法解决吗?
PS:我尝试将的JSON响应转换has_arrived
为字符串,然后将其转换回布尔值,结果发现True
如果字符串中有任何字符,我总会得到一个值。我有点卡在这里。
回答:
尽管Python的对象声明语法与Json语法非常相似,但它们是截然不同且不兼容的。除True
/true
问题外,还有其他问题(例如,Json和Python处理日期的方式非常不同,而python允许单引号和注释,而Json不允许)。
解决方案不是尝试将它们视为同一事物,而是根据需要将它们从一个转换为另一个。
Python的json库可用于解析(读取)字符串中的Json并将其转换为python对象…
data_from_api = '{"response_code": 200, ...}' # data_from_api should be a string containing your jsoninfo = json.loads(data_from_api)
# info is now a python dictionary (or list as appropriate) representing your Json
您也可以将python对象转换为json …
info_as_json = json.dumps(info)
例:
# Import the json libraryimport json
# Get the Json data from the question into a variable...
data_from_api = """{
"response_code": 200,
"train_number": "12229",
"position": "at Source",
"route": [
{
"no": 1, "has_arrived": false, "has_departed": false,
"scharr": "Source",
"scharr_date": "15 Nov 2015", "actarr_date": "15 Nov 2015",
"station": "LKO", "actdep": "22:15", "schdep": "22:15",
"actarr": "00:00", "distance": "0", "day": 0
},
{
"actdep": "23:40", "scharr": "23:38", "schdep": "23:40",
"actarr": "23:38", "no": 2, "has_departed": false,
"scharr_date": "15 Nov 2015", "has_arrived": false,
"station": "HRI", "distance": "101",
"actarr_date": "15 Nov 2015", "day": 0
}
]
}"""
# Convert that data into a python object...
info = json.loads(data_from_api)
print(info)
第二个示例显示True / true转换是如何发生的。还请注意对引号的更改以及如何删除注释…
info = {'foo': True, # Some insightful comment here 'bar': 'Some string'}
# Print a condensed representation of the object
print(json.dumps(info))
> {"bar": "Some string", "foo": true}
# Or print a formatted version which is more human readable but uses more bytes
print(json.dumps(info, indent=2))
> {
> "bar": "Some string",
> "foo": true
> }
以上是 将“ true”(JSON)转换为等效于Python的“ True” 的全部内容, 来源链接: utcz.com/qa/400213.html