確信が持てませんが、PythonがJSONを操作する方法はたくさんあります〜

画像

著者: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の説明を見てみましょう。

JSONJ 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はいPythonjsonデータのエンコードとデコードに使用できるサードパーティライブラリ

  • エンコード: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.loadjsonファイルをもう一度読み取って中国語を表示することも、保存時に中国語を直接表示することもできます。

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のデータ;第二に、様々な実用的な例、意志jsonPythonデータのさまざまな種類の、特に辞書が変換されている入力し、最後に、それを説明することが重要であるjsonデータが読み出され、書き込みそして標準化された操作。

この記事の詳細な説明がjsonデータの取得に役立つことを願っています〜


自分で作成したPython学習グループ(721195303)を引き続きお勧めします。グループ内のすべての学生がPythonを学習しています。Pythonを学習したい、または学習している場合は、ぜひ参加してください。誰もがソフトウェア開発パーティーであり、共有しています。最新のPythonの高度な資料のコピーや、2021年に自分で編集したゼロベースの教育など、随時(Pythonソフトウェア開発に関連するもののみ)の商品。高度でPythonに興味のある友人を歓迎します。

おすすめ

転載: blog.csdn.net/aaahtml/article/details/114382845