[解決済み] Python - バイト配列をJSON形式に変換する
2022-10-26 13:47:45
質問
をパースしたい。
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")
を呼び出そうとすると
loads
を使用して、JSONとしてパースします。
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
}
]
Antti Haapalaがコメントで言及しているように、我々は
ast.literal_eval
を変換するために
my_bytes_value
をPythonのリストに変換し、一度文字列にデコードします。
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)
一般に、この問題は、誰かがデータを保存するために、そのPythonを印刷することによって発生します。
repr
を使う代わりに
json
モジュールを使って、適切な JSON データを作成しています。可能であれば、そもそも適切なJSONデータが作成されるように、その問題を修正したほうがよいでしょう。
関連
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] 2つのリストを辞書に変換するにはどうしたらいいですか?
-
[解決済み] JSON文字列を安全にオブジェクトに変換する
-
[解決済み] 正しい」JSONの日付形式とは?
-
[解決済み] JSオブジェクトをJSON文字列に変換する
-
[解決済み] Python 3で文字列をバイトに変換する最良の方法?
-
[解決済み] JSONをC#のダイナミックオブジェクトにデシリアライズする?
-
[解決済み] Python RequestsでJSONデータをPOSTする方法とは?
-
[解決済み] JSON APIのレスポンス形式には規格がありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複