Pythonでjsonは扱えない?
そもそもPythonにJSON型はない。
なのでPythonでJSON形式の文字列を送信したり、受信したりする時、双方で型を合わせる必要がある。
そもそもJSONとは
JSON (JavaScript Object Notation) は、 RFC 7159 (RFC 4627 を obsolete) と ECMA-404 によって定義された軽量のデータ交換用のフォーマット
データファイルの書き方のテンプレみたいなもんやと思っとけばおk
型を合わせる
前述したようにPythonにはJSON型は無く、代わりに辞書型がある。
辞書型は「’(シングルクォーテーション」でも「”(ダブルクォーテーション)」でもどちらでも柔軟に書けるが、JSONは基本的に 「”(ダブルクォーテーション)」 である必要がある。
書き換えにはjsonをimportして使えばおk
import json
実際の使用例はこんな感じ
>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
//シングルコーテーションがダブルコーテーションに、Noneがnullに()が[]になっている。
>>> print(json.dumps("\"foo\bar"))
"\"foo\bar"
>>> print(json.dumps('\u1234'))
"\u1234"
>>> print(json.dumps('\\'))
"\\"
>>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
{"a": 0, "b": 0, "c": 0}
>>> from io import StringIO
>>> io = StringIO()
>>> json.dump(['streaming API'], io)
>>> io.getvalue()
'["streaming API"]'
ここで使われているjson.dumpsはデータをJSON形式にエンコードすることのできる関数
- エンコードとはデータを別の型に変換すること
- json.dumps
- デコードとはエンコードされた型を元に戻すこと
- json.loads
jsonライブラリでは、loads関数がデコード、dumps関数がエンコードとなっている。
一旦json.dumpsだけやる
PythonからPOSTする時はこんな感じになる
import requests
import json
# POST先URL
url = "POST送信するURL"
# JSON形式のデータ
jsonData = {
"col1": "val1",
"col2": "val2"
}
# POST送信
response = requests.post(
url,
json = json.dumps(jsonData) #jsonはなくても送信可能
)
resDatas = response.json()
POST時に「json = 」とすることで、requestsが自動的にContentsTypeをjsonとして送信してくれる。
json.dumpsしている場合、jsonは省略可能。分かりやすさのためには、明示的に記載した方が良いとは思う。
デコードも知りたければ下記リンクより
引用、参考