ホームページ バックエンド開発 Python チュートリアル Pythonの操作を深く理解するjsonのまとめ

Pythonの操作を深く理解するjsonのまとめ

Feb 23, 2017 pm 04:30 PM

Json は AJAX における Web サーバーとクライアント間の通信用のデータ形式として最も広く使用されており、この記事では主に Python による json の操作の概要を紹介します。興味のある方は詳細をご覧ください。

Json の紹介: Json (正式名は JavaScript Object Notation) は、軽量のデータ交換形式です。 Json の最も広く使用されているアプリケーションは、AJAX での Web サーバーとクライアント間の通信用のデータ形式としてです。最近では http リクエストでもよく使われるので、あらゆる種類の json を学ぶのは自然なことです。 Python の公式 Web サイトのアドレス: https://docs.python.org/2/library/json.html?highlight=json#module-json

Json API の使用方法: Python バージョン 2.6 より前は、最初にパッケージをダウンロードしてインストールする必要がありますそれを使用することができます。これは、RF での SeleniumLibrary の現在の使用法に似ています。しかし、2.6 では、公式ドキュメント (https://docs.python.org/2.6/whatsnew/2.6.html) には、「マルチプロセッシングや json など、いくつかの重要な新しいパッケージが標準ライブラリに追加されていますが、 Python 3 や 2.6 と比較すると、これらのパッケージには新しい機能は導入されていません。「したがって、Python 2.6 以降の子供用シューズをインストールする場合、json パッケージをダウンロードする必要はありません。必要な場所に json をインポートするだけで済みます。」インストール後に使用してください。ディレクトリの LIB の下に、これらの 2 つのパッケージが表示されます (クリックしてソース コードを注意深く読むと、より多くのメリットが得られます)。以下に示すように:

Pythonの操作を深く理解するjsonのまとめPython2.6 以降は、 JSON のエンコードとデコード、ほとんどの Python の組み込み型と Json 間の変換をサポートします。最も単純な例は次のとおりです。

>>> import json
>>> data = {"spam" : "foo", "parrot" : 42}
>>> in_json = json.dumps(data) # Encode the data
>>> in_json
'{"parrot": 42, "spam": "foo"}'
>>> json.loads(in_json) # Decode into a Python object
{"spam" : "foo", "parrot" : 42}
ログイン後にコピー

Encode プロセスは、Python オブジェクトを JSON オブジェクトに変換するプロセスです。よく使用される 2 つの関数は、ダンプ関数とダンプ関数です。 2 つの関数の唯一の違いは、dump は Python オブジェクトを json オブジェクトに変換して fp ファイル ストリームを生成するのに対し、dump は文字列を生成することです。

Pythonの操作を深く理解するjsonのまとめ

Pythonの操作を深く理解するjsonのまとめ 他のパラメータの使用方法は同じです。以下は、学習したコード スニペットの一部です:

dic1 = {'type':'dic1','username':'loleina','age':16}
json_dic1 = json.dumps(dic1)
print json_dic1
json_dic2 = json.dumps(dic1,sort_keys=True,indent =4,separators=(',', ': '),encoding="gbk",ensure_ascii=True )
print json_dic2
ログイン後にコピー

実行結果は次のとおりです:

Pythonの操作を深く理解するjsonのまとめ インスタンス内のキー 'username' の値が中国語の "test" に置き換えられると、初回はパラメータ変換なしでエラーが報告されますが、2 回目ではパラメータを使用して正常に実行されます。

Pythonの操作を深く理解するjsonのまとめ は、実際には関数のパラメータを理解するプロセスです。一般的に使用されるパラメータをいくつか示します。

Skipkeys: dict のキーのデータが Python の基本タイプではない場合、デフォルト値は False です ( str、unicode、int、long、float、bool、None)、False に設定すると、TypeError が報告されます。この時点で True に設定すると、このタイプのキーはスキップされます

ensure_ascii: デフォルト値は True です。辞書に非 ASCII 文字が含まれている場合、データは False に設定すると uXXXX と同様に表示されます。正常に表示できます

インデント: 負でない整数である必要があります。0 または空の場合、データは 1 行で表示されます。それ以外の場合は、行が折り返され、前の空白が数値に応じて表示されます。この方法で出力された json データは、整形された json とも呼ばれます

separators: 区切り文字は、実際には (item_separator, dict_separator) のタプルです。これは、次のことを意味します。辞書内のキーは「,」で区切られ、キーと値は「:」で区切られます。

エンコーディング: デフォルトは UTF-8 で、json データのエンコーディング方法を設定します。

sort_keys: キーの値に従ってデータを並べ替えます。

デコードプロセスは、json オブジェクトを Python オブジェクトに変換するプロセスであり、よく使用される 2 つの関数は、loads 関数とload 関数です。違いはダンプとダンプと同じです。

if __name__ == '__main__':
  # 将python对象test转换json对象
  test = [{"username":"测试","age":16},(2,3),1]
  print type(test)
  python_to_json = json.dumps(test,ensure_ascii=False)
  print python_to_json
  print type(python_to_json)

  # 将json对象转换成python对象
  json_to_python = json.loads(python_to_json)
  print json_to_python
  print type(json_to_python)
ログイン後にコピー

実行結果は以下の通りです:

从上面2个例子的测试结果可以看到,python的一些基本类型通过encode之后,tuple类型就转成了list类型了,再将其转回为python对象时,list类型也并没有转回成tuple类型,而且编码格式也发生了变化,变成了Unicode编码。具体转化时,类型变化规则如下所示:

Python-->Json

Pythonの操作を深く理解するjsonのまとめ

Json-->Python

Pythonの操作を深く理解するjsonのまとめ

Json处理中文问题:

关于python字符串的处理问题,如果深入的研究下去,我觉得可以写2篇文章了(实际上自己还没整很明白),在这里主要还是总结下使用python2.7.11处理json数据的问题。前期做接口测试,处理最多的事情就是,把数据组装成各种协议的报文,然后发送出去。然后对返回的报文进行解析,后面就遇到将数据封装在json内嵌入在http的body内发送到web服务器,然后服务器处理完后,返回json数据结果的问题。在这里面就需要考虑json里有中文数据,怎么进行组装和怎么进行解析,以下是基础学习的一点总结:

第一:Python 2.7.11的默认编码格式是ascii编码,而python3的已经是unicode,在学习编解码的时,有出现乱码的问题,也有出现list或者dictionary或者tuple类型内的中文显示为unicode的问题。出现乱码的时候,应该先看下当前字符编码格式是什么,再看下当前文件编码格式是什么,或者没有设置文件格式时,查看下IDE的默认编码格式是什么。最推崇的方式当然是每次编码,都对文件编码格式进行指定,如在文件前 设置# coding= utf-8。

第二:字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码

第三:将json数据转换成python数据后,一般会得到一个dict类型的变量,此时内部的数据都是unicode编码,所以中文的显示看着很痛苦,但是对于dict得到每个key的value后,中文就能正常显示了,如下所示:

# coding= utf-8
import json
import sys

if __name__ == '__main__':
  # 将python对象test转换json对象
  test = {"username":"测试","age":16}
  print type(test)
  python_to_json = json.dumps(test,ensure_ascii=False)
  print python_to_json
  print type(python_to_json)

  # 将json对象转换成python对象
  json_to_python = json.loads(python_to_json)
  print type(json_to_python)
  print json_to_python['username']
ログイン後にコピー

运行结果:

Pythonの操作を深く理解するjsonのまとめ

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

更多Pythonの操作を深く理解するjsonのまとめ相关文章请关注PHP中文网!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Apr 02, 2025 am 07:03 AM

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。

See all articles