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 つのパッケージが表示されます (クリックしてソース コードを注意深く読むと、より多くのメリットが得られます)。以下に示すように:
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 は文字列を生成することです。
他のパラメータの使用方法は同じです。以下は、学習したコード スニペットの一部です:
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
実行結果は次のとおりです:
インスタンス内のキー 'username' の値が中国語の "test" に置き換えられると、初回はパラメータ変換なしでエラーが報告されますが、2 回目ではパラメータを使用して正常に実行されます。
は、実際には関数のパラメータを理解するプロセスです。一般的に使用されるパラメータをいくつか示します。
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
Json-->Python
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']
运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。
更多Pythonの操作を深く理解するjsonのまとめ相关文章请关注PHP中文网!