著者:Peter
出典:Pythonプログラミング時間
実際の作業、特にWebデータの送信では、jsonデータに遭遇することがよくあります。一般的なテキストデータや数値データほど友好的ではなく、Pythonの辞書データと非常によく似ているため、多くの人が混乱を招いています。
この記事では、Pythonとpandas(Pythonのサードパーティライブラリ)を使用して、特定のケースと組み合わせてjsonデータを処理する方法について詳しく説明します。主な内容は次のとおりです。
-
jsonデータの紹介
-
一般的に使用されるjsonデータ変換Webサイト
-
jsonデータとpythonデータの変換
-
pandasはjsonデータを処理します
多くの人がPythonを学び、どこから始めればよいのかわかりません。
多くの人がPythonを学び、基本的な文法を習得した後、どこから始めればよいかわかりません。
ケーススタディを行った多くの人々は、より高度な知識を学ぶ方法を知りません。
したがって、これら3つのタイプの人々のために、ビデオチュートリアル、電子書籍、およびコースのソースコードを無料で受け取ることができる優れた学習プラットフォームを提供します。
QQグループ:721195303
1.JSONの簡単な紹介
1.1jsonデータとは
まず、ウィキペディアのjsonの説明を見てみましょう。
JSON(J AVA S CRIPT O bject Nのotation、JavaScriptのオブジェクト表記)は、送信データに使用される交換ダグラス・クロックフォードのコンセプトやデザインによって言語、軽量素材、テキストベースの読みやすい言語作るには、属性値で構成オブジェクトされますまたはシーケンシャル値。
JSONデータ形式は言語とは何の関係もありません。JavaScriptから派生していますが、現在、多くのプログラミング言語がJSON形式のデータの生成と解析をサポートしています。ファイル拡張子は
.json
です。
上記の公式紹介を通じて、3つのポイントを要約します。
-
JSONはテキスト(データ)言語であり、超軽量のデータ交換フォーマットです。
-
JSONデータは読みやすく、読みやすい
-
JavaScriptから派生し、他の言語はJSONデータを解析できます
1.2jsonデータ型
JSONは実際にはJavaScriptのサブセットであり、JSON言語の6つのデータ型またはそれらの間の任意の組み合わせのみです。
-
数値:JavaScriptの数値と一致
-
ブール値:JavaScriptでtrueまたはfalse
-
文字列:JavaScriptの文字列
-
null:JavaScriptではnull
-
配列:JavaScript表現:[]
-
オブジェクト:JavaScript
{…}
表現
1.32つのルール
1. JSON言語では、文字セットはUTF-8である必要があると規定されています
2.均一に解析するには、JSON文字列の要件を二重引用符で囲む必要があります""
2.一般的に使用されるjsonデータ変換Webサイト
1、json.cn:https://www.json.cn/
2. jsonルーキーツール:https://c.runoob.com/front-end/53
3. Sojson:https://www.sojson.com/、非常に完全なjson処理Webサイト
4、kjson:https://www.kjson.com/
5. Lion-jsonチェックツールのプログラミング:https://www.w3cschool.cn/tools/index?name = jsoncheck
6. JSONViewer:http://jsonviewer.stack.hu/、Json形式が正しいかどうかを確認するために使用されるオンラインアプリケーションツール
3.JSONおよびDict型変換
このセクションでは、主にjson型データとPython型の変換について説明します。
json
オブジェクトとPython
ディクショナリの変換では、主に組み込みjson
パッケージを使用します。このパッケージの使用については、以下で詳しく説明します。詳細な学習資料については、公式Webサイトを参照してください:https://docs.python.org/3/library/json.html
パッケージを最初に使用するときに直接インポートします。
import json
json
パッケージには、Pythonの組み込みデータ型で変換するための4つのメソッドがあります。
方法 | 効果 |
---|---|
json.dumps() | PythonオブジェクトをJson文字列にエンコードします:辞書からjson |
json.loads() | Json文字列をPythonオブジェクトにデコードします:jsonを辞書にデコードします |
json.dump() | Pythonのオブジェクトをjsonに変換し、ファイルに保存します |
json.load() | ファイル内のjson形式をPythonオブジェクトに変換し、抽出します |
注:ロードに関連する2つのメソッドは、ファイル操作に関連するもう1つのステップです。
json.dumps
ダンプに関連する2つの関数は、Pythonデータ型をjson型に変換することです。変換比較表は次のとおりです。
Python | JSON |
---|---|
辞書 | オブジェクト |
リスト、タプル | アレイ |
str、unicode | ストリング |
int、long、float | 数 |
本当 | true |
誤り | false |
なし | ヌル |
json.dumps
このメソッドの機能は、Python辞書タイプのデータをjson形式のデータに変換することです。具体的なパラメーターは次のとおりです。
json.dumps(obj, # 待转化的对象
skipkeys=False, # 默认值是False,若dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
ensure_ascii=True, # 默认是ASCII码,若设置成False,则可以输出中文
check_circular=True, # 若为False,跳过对容器类型的循环引用检查
allow_nan=True, # 若allow_nan为假,则ValueError将序列化超出范围的浮点值(nan、inf、-inf),严格遵守JSON规范,而不是使用JavaScript等价值(nan、Infinity、-Infinity)
cls=None,
indent=None, # 参数根据格式缩进显示,表示缩进几个空格
separators=None, # 指定分隔符;包含不同dict项之间的分隔符和key与value之间的分隔符;同时去掉`: `
encoding="utf-8", # 编码
default=None, # 默认是一个函数,应该返回可序列化的obj版本或者引发类型错误;默认值是只引发类型错误
sort_keys=False, # 若为False,则字典的键不排序;设置成True,按照字典排序(a到z)
**kw)
上記の一般的なパラメータの役割を例を通して説明します
1.Pythonタイプデータに中国語が含まれている場合
information1 = {
'name': '小明',
'age': 18,
'address': 'shenzhen'
}
# 字典转成json数据
information2 = json.dumps(information1)
print(type(information1))
print(type(information2))
print(information2)
ensure_ascii=False
中国語を表示するパラメータを追加します。
# 字典转成json数据
information3 = json.dumps(information1,ensure_ascii=False)
⚠️結果から、次のことがわかりました。jsonデータはすべて二重引用符になっています。元の辞書タイプのデータは一重引用符を使用していました。引用符の変更の例を見てみましょう。
>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) # python中的键是字符串,用单引号
# 结果显示
{
"4": 5, # 变成双引号
"6": 7
}
2. jsonデータはインデントによって美しく出力され、インデントパラメーターが使用されます
information4 = {
'name': '小明',
'age': 18,
'skills': 'python',
'english': 'CET6',
'major': '会计',
'address': '深圳'
}
information5 = json.dumps(information4, ensure_ascii=False) # 不缩进
information6 = json.dumps(information4, ensure_ascii=False, indent=2) # 缩进2个空格
information7 = json.dumps(information4, ensure_ascii=False, indent=5) # 缩进5个空格
print(information5)
print(information6)
print(information7)
3.Pythonデータ型のキーを並べ替えて出力します
information4 = {
'name': '小明',
'age': 18,
'skills': 'python',
'english': 'CET6',
'major': '会计',
'address': '深圳'
}
information8 = json.dumps(information4, ensure_ascii=False, indent=2) #
information9 = json.dumps(information4, ensure_ascii=False, indent=2,sort_keys=True) # 键的排序设置成True
print(information8)
print(information9)
sort_keys=True
設定により、出力結果が最初の文字でソートされていることがわかります。最初の文字が同じ場合、2番目の文字が再度ソートされます。
4.出力セパレーターの制御
separators
パラメータを使用して、異なる出力セパレータを設定します。デフォルトは異なるdic要素間であり、,
キーと値のペア間のデフォルトはです。:
information1 = {
'name': '小明',
'age': 18,
'address': 'shenzhen'
}
information2 = json.dumps(information1,ensure_ascii=False)
information10 = json.dumps(information1,ensure_ascii=False,separators=('+','@')) # 改变分隔符
print(information2) # 默认连接符
print(information10)
json.dump
json.dump
機能はjson.dumps
似ていますが、データをファイルに保存する必要があり、2つのパラメータは同じです
以下の個人情報をファイルに書き込んでみます
information = {
'name': '小明',
'age': 18,
'skills': 'python',
'english': 'CET6',
'major': '会计',
'address': '深圳'
}
1.indent
パラメータを使用しない場合、すべての情報が1行で表示されます
# 使用json.dump;json数据一定是双引号
with open("information_1_to_json.json", "w", encoding='utf-8') as f:
# json.dump(dic_, f) # 全部写入一行数据,不换行
json.dump(information, # 待写入数据
f, # File对象
sort_keys=True, # 键的排序
ensure_ascii=False) # 显示中文
実際の節約効果を見てみましょう。
indent
パラメータを追加すると、複数行のデータが表示されます。
with open("information_2_to_json.json", "w", encoding='utf-8') as f:
json.dump(information,
f,
indent=2, # 空格缩进符,写入多行
sort_keys=True,
ensure_ascii=False)
json.loads
また、load
関連する2つの関数は、次のようにPythonjsonデータ型変換テーブルに変換されます。
JSON | Python |
---|---|
オブジェクト | 辞書 |
アレイ | リスト |
ストリング | ユニコード |
数値(int) | int、long |
数(実数) | 浮く |
true | 本当 |
false | 誤り |
ヌル | なし |
json.loads
関数は、json形式のデータをPython辞書タイプのデータに変換することです。
information1 = {
'name': '小明',
'age': 18,
'address': 'shenzhen'
}
# 字典转成json数据
information3 = json.dumps(information1,ensure_ascii=False)
information11 = json.loads(information3) # json转成字典数据
print(information11)
json.load
jsonファイルを開き、辞書データに変換します
# 使用json.load
with open("information_to_json.json",encoding="utf-8") as f:
json_to_dict = json.load(f) # json转成字典
print(json_to_dict)
4.JSONおよび非Dictタイプの変換
上記は主にjson形式のデータとPython辞書の間の変換です。以下では、他のPythonデータ型json.dumps
をjsonデータに変換する方法について説明します。
1.タプル変換
2.リスト変換
3.ブール変換
4.数値データ変換
5.Demjsonを使用して解析します
Demjson
はいPython
、json
データのエンコードとデコードに使用できるサードパーティライブラリ:
-
エンコード:PythonオブジェクトをJSON文字列にエンコードします
-
デコード:エンコードされたJSON文字列をPythonオブジェクトにデコードします
demjsonをインストールします
pip install demjson
インストールを直接使用すると、kan'daoは次のインターフェイスを参照して、インストールが成功したことを示します。
demjsonを使用する
使用前にインポート:
import demjson # 导入包
1.コーディング機能
2.デコード機能
demjson
このパッケージの明らかな欠点は、中国語のデータを直接解析できないことです。
中国語のデータを見たい場合は、eval関数を使用できます。
6.パンダはjsonを処理します
以下に、パンダライブラリによるjsonデータの処理について説明します。
-
read_json:jsonファイルからデータを読み取ります
-
to_json:パンダのデータをjsonファイルに書き込みます
-
json_normalize:jsonデータを正規化します
https://geek-docs.com/pandas/pandas-read-write/pandas-reading-and-writing-json.html
6.1 read_json
最初に公式ウェブサイトのread_json
パラメータを見てください:
pandas.read_json(
path_or_buf=None, # json文件路径
orient=None, # 重点参数,取值为:"split"、"records"、"index"、"columns"、"values"
typ='frame', # 要恢复的对象类型(系列或框架),默认’框架’.
dtype=None, # boolean或dict,默认为True
convert_axes=None,
convert_dates=True,
keep_default_dates=True,
numpy=False,
precise_float=False,
date_unit=None,
encoding=None,
lines=False, # 布尔值,默认为False,每行读取该文件作为json对象
chunksize=None,
compression='infer',
nrows=None,
storage_options=None)
詳細なパラメーター分析については、次の記事を参照してください:https://blog.csdn.net/qq_41562377/article/details/90203805
次の図に示すように、jsonデータのコピーがあるとします。
上記のデータを読み込みます。データは比較的標準化されているため、ファイルパスを入力することで直接読み込むことができます。
次のパラメータの説明に焦点を当てますorient
。
1、oriden = 'split'
split’ : dict like {index -> [index], columns -> [columns], data -> [values]}
jsonファイルのキーの名前はindex,cloumns,data
これら3つのみにすることができ、もう1つのキーは機能せず、1つ少ないキーは機能しません。例えば:
2、orient = 'records'
‘records’ : list like [{column -> value}, … , {column -> value}]
3、orient = 'index'
dict like {index -> {column -> value}}
4、orient = '列'
dict like {column -> {index -> value}}
転置後は上記orient='index'
の結果です
5、orient = 'values'
‘values’ : just the values array
6.2 to_json
to_json
この方法は、DataFrameファイルをjsonファイルとして保存することです。
df.to_json("个人信息.json") # 直接保存成json文件
上記のコードに従って保存すると、中国語は表示されません。
もちろん、json.load
jsonファイルをもう一度読み取って中国語を表示することも、保存時に中国語を直接表示することもできます。
df.to_json("个人信息1.json",force_ascii=False) # 显示中文
6.3 json_normalize
https://www.jianshu.com/p/a84772b994a0
上で紹介したjsonデータの保存と読み取りのjsonデータはすべてリストの形式ですが、jsonファイルのデータは通常すべてリストの形式ではないため、ファイルを変換する必要があります。辞書構造をリスト形式に変換するこのプロセスは、標準化と呼ばれます。
パンダのjson_normalize()
関数は、辞書またはリストをテーブルに変換し、使用する前にそれらをインポートできます。
from pandas.io.json import json_normalize
公式ウェブサイトと実際の例を通して同時に学ぶために、最初に公式ウェブサイトの例を見てください:
1.階層ディクショナリは、属性の形式でデータを表示します。
2. max_levelパラメーターを追加すると、さまざまな効果が表示されます。
max_level = 0の場合、ネストされたディクショナリは全体として扱われ、データフレームに表示されます。
max_level = 1の場合、ネストされたディクショナリは逆アセンブルされ、内部のキーは分離されます。
3.ネストされたレベルのコンテンツの一部を読み取ります。
4.すべてのコンテンツを読む
7.まとめ
json
データは、仕事でよく見かけるデータ形式であり、非常に重要なデータでもあります。
この記事は最初のjson
データ・フォーマットと簡単な紹介、という考え方json
のデータ;第二に、様々な実用的な例、意志json
やPython
データのさまざまな種類の、特に辞書が変換されている入力し、最後に、それを説明することが重要であるjson
データが読み出され、書き込みそして標準化された操作。
この記事の詳細な説明がjson
データの取得に役立つことを願っています〜