データサイエンスに必要なJSONの読み取りおよび書き込み操作の詳細な説明

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'>

おすすめ

転載: blog.csdn.net/qq_20288327/article/details/124115125