바이트 배열을 JSON 형식으로 변환합니다.
해석하고 싶다bytes문자열을 JSON 형식으로 지정하여 python 개체로 변환합니다.다음은 제가 가지고 있는 소스입니다.
my_bytes_value = b'[{\'Date\': \'2016-05-21T21:35:40Z\', \'CreationDate\': \'2012-05-05\', \'LogoType\': \'png\', \'Ref\': 164611595, \'Classe\': [\'Email addresses\', \'Passwords\'],\'Link\':\'http://some_link.com\'}]'
그리고 이것이 제가 원하는 결과입니다.
[{
"Date": "2016-05-21T21:35:40Z",
"CreationDate": "2012-05-05",
"LogoType": "png",
"Ref": 164611595,
"Classes": [
"Email addresses",
"Passwords"
],
"Link": "http://some_link.com"}]
먼저 바이트를 문자열로 변환했습니다.
my_new_string_value = my_bytes_value.decode("utf-8")
하지만 내가 이 모든 걸 불러내려고 할 때loadsJSON으로 해석하려면:
my_json = json.loads(my_new_string_value)
다음의 에러가 표시됩니다.
json.decoder.JSONDecodeError: Expecting value: line 1 column 174 (char 173)
당신의.bytes오브젝트는 거의 JSON이지만 큰따옴표 대신 작은따옴표를 사용하여 문자열이어야 합니다.이 문제를 해결하는 한 가지 방법은 이 문제를bytes로.str따옴표를 바꿉니다.또 다른 옵션은ast.literal_eval; 자세한 것은, 이하를 참조해 주세요.결과를 인쇄하거나 유효한 JSON으로 파일에 저장하려면 JSON을 Python 목록에 로드한 후 덤프할 수 있습니다.예,
import json
my_bytes_value = b'[{\'Date\': \'2016-05-21T21:35:40Z\', \'CreationDate\': \'2012-05-05\', \'LogoType\': \'png\', \'Ref\': 164611595, \'Classe\': [\'Email addresses\', \'Passwords\'],\'Link\':\'http://some_link.com\'}]'
# Decode UTF-8 bytes to Unicode, and convert single quotes
# to double quotes to make it valid JSON
my_json = my_bytes_value.decode('utf8').replace("'", '"')
print(my_json)
print('- ' * 20)
# Load the JSON to a Python list & dump it back out as formatted JSON
data = json.loads(my_json)
s = json.dumps(data, indent=4, sort_keys=True)
print(s)
산출량
[{"Date": "2016-05-21T21:35:40Z", "CreationDate": "2012-05-05", "LogoType": "png", "Ref": 164611595, "Classe": ["Email addresses", "Passwords"],"Link":"http://some_link.com"}]
- - - - - - - - - - - - - - - - - - - -
[
{
"Classe": [
"Email addresses",
"Passwords"
],
"CreationDate": "2012-05-05",
"Date": "2016-05-21T21:35:40Z",
"Link": "http://some_link.com",
"LogoType": "png",
"Ref": 164611595
}
]
Anti Haapala가 댓글에 언급했듯이ast.literal_eval개종하다my_bytes_value문자열로 디코딩하면 파이썬 목록으로 이동합니다.
from ast import literal_eval
import json
my_bytes_value = b'[{\'Date\': \'2016-05-21T21:35:40Z\', \'CreationDate\': \'2012-05-05\', \'LogoType\': \'png\', \'Ref\': 164611595, \'Classe\': [\'Email addresses\', \'Passwords\'],\'Link\':\'http://some_link.com\'}]'
data = literal_eval(my_bytes_value.decode('utf8'))
print(data)
print('- ' * 20)
s = json.dumps(data, indent=4, sort_keys=True)
print(s)
일반적으로 이 문제는 누군가가 적절한 JSON 데이터를 생성하기 위해 모듈을 사용하는 대신 Python을 인쇄하여 데이터를 저장했기 때문에 발생합니다.가능하다면 우선 적절한 JSON 데이터가 생성되도록 문제를 수정하는 것이 좋습니다.
간단하게 사용할 수 있습니다.
import json
json.loads(my_bytes_value)
Python 3.5 + Use io 모듈
import json
import io
my_bytes_value = b'[{\'Date\': \'2016-05-21T21:35:40Z\', \'CreationDate\': \'2012-05-05\', \'LogoType\': \'png\', \'Ref\': 164611595, \'Classe\': [\'Email addresses\', \'Passwords\'],\'Link\':\'http://some_link.com\'}]'
fix_bytes_value = my_bytes_value.replace(b"'", b'"')
my_json = json.load(io.BytesIO(fix_bytes_value))
이 바이트 배열을 직접 json으로 변환하려면 먼저 바이트 배열을 decode()를 사용하여 문자열로 변환합니다. utf-8이 표준입니다.따옴표 변경..마지막 단계는 덤프된 문자열에서 "를 제거하고 json 개체를 문자열에서 목록으로 변경하는 것입니다.
dumps(s.decode()).replace("'", '"')[1:-1]
보다 나은 솔루션은 다음과 같습니다.
import json
byte_array_example = b'{"text": "\u0627\u06CC\u0646 \u06CC\u06A9 \u0645\u062A\u0646 \u062A\u0633\u062A\u06CC \u0641\u0627\u0631\u0633\u06CC \u0627\u0633\u062A."}'
res = json.loads(byte_array_example.decode('unicode_escape'))
print(res)
결과:
{'text': 'این یک متن تستی فارسی است.'}
utf-8에 의한 디코딩에서는 유니코드 문자를 디코딩할 수 없습니다.올바른 솔루션은 uicode_escape입니다.
그것은 괜찮아
d = json.dumps(byte_str.decode('utf-8'))
bytes 객체가 있고 이를 JSON 파일에 저장하려면 먼저 바이트 객체를 디코딩해야 합니다. 왜냐하면 JSON은 데이터 유형이 몇 개뿐이고 원시 바이트 데이터는 그 중 하나가 아니기 때문입니다.여기에는 배열, 10진수, 문자열 및 개체가 있습니다.
바이트 개체를 디코딩하려면 먼저 인코딩을 알아야 합니다.이를 위해
import chardet
encoding = chardet.detect(your_byte_object)['encoding']
그러면 이 개체를 json 파일에 이렇게 저장할 수 있습니다.
data = {"data": your_byte_object.decode(encoding)}
with open('request.txt', 'w') as file:
json.dump(data, file)
가장 간단한 해결방법은jsonhttp 요구와 함께 제공되는 함수입니다.
예를 들어 다음과 같습니다.
언급URL : https://stackoverflow.com/questions/40059654/convert-a-bytes-array-into-json-format
'programing' 카테고리의 다른 글
| Java - 예외의 첫 번째 원인을 찾습니다. (0) | 2023.02.28 |
|---|---|
| JSON.parse vs. eval() (0) | 2023.02.28 |
| angular 템플릿의 배열 값을 확인하시겠습니까? (0) | 2023.02.23 |
| jQuery ajax 성공 콜백 함수 정의 (0) | 2023.02.23 |
| SQL을 사용하여 날짜 범위 생성 (0) | 2023.02.23 |
