"True"(JSON)를 Python 등가 "True"(참)로 변환
최근 사용하고 있는 Train status API에 의해 2개의 키 값 쌍이 추가되었습니다.(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 개체로 변환할 수 있으며 이미 설치되어 있습니다.
# Import the library
import json
# Define a string of json data
data_from_api = '{"response_code": 200, ...}'
data = json.loads(data_from_api)
# data is now a python dictionary (or list as appropriate) representing your Json
python 객체를 json으로 변환할 수도 있습니다.
data_as_json = json.dumps(data)
예:
# Import the json library
import 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...
data = json.loads(data_from_api)
print(data)
그리고 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
> }
값을 사용하여 부울에 캐스트할 수도 있습니다.예를 들어, 데이터가 "json_data"라고 불리는 경우:
value = json_data.get('route')[0].get('has_arrived') # this will pull "false" into *value
boolean_value = bool(value == 'true') # resulting in False being loaded into *boolean_value
일종의 해키이지만, 작동한다.
하는 대신에eval
정답에 대해서는 모듈을 사용합니다.
Python의 부울값을 int, str, list 등에 활용할 수 있습니다.
예를 들어 다음과 같습니다.
bool(1) # True
bool(0) # False
bool("a") # True
bool("") # False
bool([1]) # True
bool([]) # False
Json 파일에서 다음을 설정할 수 있습니다.
"has_arrived": 0,
그러면 Python 코드로
if data["has_arrived"]:
arrived()
else:
not_arrived()
여기서의 문제는 False로 표시된0과 그 값을 0으로 혼동하지 않는 것입니다.
"""
String to Dict (Json): json.loads(jstr)
Note: in String , shown true, in Dict shown True
Dict(Json) to String: json.dumps(jobj)
"""
>>> jobj = {'test': True}
>>> jstr = json.dumps(jobj)
>>> jobj
{'test': True}
>>> jstr
'{"test": true}'
>>> json.loads(jstr)
{'test': True}
파일을 읽고 있는 분들에게 도움이 될 만한 것을 하나 더 추가하고 싶습니다.
with open('/Users/mohammed/Desktop/working_create_order.json')as jsonfile:
data = json.dumps(jsonfile.read())
그런 다음 위에서 수락한 답변을 따르십시오.
data_json = json.loads(data)
{ "값":False } 또는 { "key": false }은(는) 올바른 json https://jsonlint.com/이 아닙니다.
json.loads는 피톤 부울 타입(False, True)을 해석할 수 없습니다.Json은 작은 글씨로 거짓, 진실하고 싶어 한다.
솔루션:
python_json_string.replace(": True", ": true", .replace(": False", ": false")
언급URL : https://stackoverflow.com/questions/33722662/converting-true-json-to-python-equivalent-true
'programing' 카테고리의 다른 글
Angularjs는 로컬 json 파일에 액세스합니다. (0) | 2023.03.11 |
---|---|
mongodb에서 ISODate를 사용한 날짜 쿼리가 작동하지 않는 것 같습니다. (0) | 2023.03.11 |
AngularJS가 개발 시스템에서 부분 캐시를 사용하지 않도록 설정함 (0) | 2023.03.11 |
모서리가 있는 석공JS (0) | 2023.03.11 |
이벤트 개체에서 데이터 속성에 액세스하는 방법 (0) | 2023.03.11 |