JSONデータ型の最も一般的なアプリケーションシナリオは、APIまたは.json安定データへのデータの保存です。Pythonでこのデータを操作するのは非常に簡単です。
記事ディレクトリ
JSON
JSONオリジン
JSONはJavaScriptObjectNotationの略です。オブジェクトリテラル構文を処理するJavaScriptプログラミング言語のサブセット。JSONは長い間言語に依存しない言語であり、独自の標準として存在します。
JSONサンプル
{
"data":[
{
"id": "1",
"name": "A同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "2",
"name": "B同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "3",
"name": "C同学",
"state": "0",
"createTime": "2020-01-21"
}
]
}
PythonはJSONをネイティブにサポートします
Pythonには、JSONデータをエンコードおよびデコードするための組み込みパッケージjsonが付属しています。
引用方法。
import json
JSONエンコーディングのプロセスは、しばしばシリアル化と呼ばれます。この用語は、ネットワークを介した保存または送信のためにデータを一連のバイトに変換することを指します。デシリアライズは、JSON標準で保存または配信されたデータをデコードするインタラクティブなプロセスです。
JSONをシリアル化する
直感的な変換により、単純なPythonオブジェクトがJSONに変換されます。
Python | JSON |
---|---|
dict | 物体 |
リスト、タプル | 配列 |
str | ストリング |
int、long、float | 番号 |
真 | true |
誤り | false |
なし | ヌル |
簡単なシリアル化の例
簡単なデータを作成します。
data = {
"data":[
{
"id": "1",
"name": "A同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "2",
"name": "B同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "3",
"name": "C同学",
"state": "0",
"createTime": "2020-01-21"
}
]
}
データはテキストとして直接保存されます。
with open("data_file.json", "w") as f:
json.dump(data, f)
データは文字列として直接使用されます。
json_str = json.dumps(data)
JSONデシリアライズ
JSONでエンコードされたデータをPythonオブジェクトに変換するには、jsonライブラリのload()とloads()を使用します。
JSON | Python |
---|---|
物体 | dict |
配列 | リスト |
ストリング | str |
数値(整数) | int |
数値(浮動小数点) | 浮く |
true | 真 |
false | 誤り |
ヌル | なし |
単純な逆シリアル化の例
jsonファイルに書き込まれたデータを読み取ります。
with open("data_file.json", "r") as read_file:
data = json.load(read_file)
文字列データ。
json_string = """
{
"data":[
{
"id": "1",
"name": "A同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "2",
"name": "B同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "3",
"name": "C同学",
"state": "0",
"createTime": "2020-01-21"
}
]
}
"""
data = json.loads(json_string)
アプリケーション
インターネットからのデータスクレイピングを通じてテキスト情報を解析します。
# 秦皇岛煤炭网微博
import requests
from bs4 import BeautifulSoup
import datetime
url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid"
post_param = {
'pageNum':'1','pageSize':'20','jsonStr':'{"typeid":"238"}'}
return_data = requests.post(url,data =post_param)
return_data = return_data.content.decode("utf-8")
import json
for i in json.loads(return_data)["rows"]:
title = i["title"]
url = "http://news.cqcoal.com/blank/nc.jsp?mid="+str(i["id"])
timeStamp=int(i["pubdate"])
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
date = dateArray.strftime("%Y-%m-%d")
print(title,url,date)
エンコードとデコード
カスタムデータ。
import json
# 基础的数字字典
py_object = {
"c": 0, "b": 0, "a": 0}
# JSON 编码
json_string = json.dumps(py_object)
print(json_string)
print(type(json_string))
{
"c": 0, "b": 0, "a": 0}
<class 'str'>
# JSON 解码
py_obj = json.loads(json_string)
print(py_obj)
print(type(py_obj))
{
'c': 0, 'b': 0, 'a': 0}
<class 'dict'>
TypeErrorが発生した場合:SampleClass型のオブジェクトはJSONシリアル化可能なエラーではないため、エンコードとデコードをカスタマイズする必要があります。
import json
class Student:
def __init__(self, name, roll_no, address):
self.name = name
self.roll_no = roll_no
self.address = address
def to_json(self):
'''
将此类的实例转换为 json
'''
return json.dumps(self, indent = 4, default=lambda o: o.__dict__)
class Address:
def __init__(self, city, street, pin):
self.city = city
self.street = street
self.pin = pin
address = Address("Bulandshahr", "Adarsh Nagar", "203001")
student = Student("Raju", 53, address)
# 编码
student_json = student.to_json()
print(student_json)
print(type(student_json))
{
"name": "Raju",
"roll_no": 53,
"address": {
"city": "Bulandshahr",
"street": "Adarsh Nagar",
"pin": "203001"
}
}
<class 'str'>
# 解码
student = json.loads(student_json)
print(student)
print(type(student))
{
'name': 'Raju', 'roll_no': 53, 'address': {
'city': 'Bulandshahr', 'street': 'Adarsh Nagar', 'pin': '203001'}}
<class 'dict'>