Maison > développement back-end > Tutoriel Python > Compréhension approfondie du résumé des opérations de python sur json

Compréhension approfondie du résumé des opérations de python sur json

高洛峰
Libérer: 2017-02-23 16:30:54
original
1523 Les gens l'ont consulté

L'application la plus largement utilisée de Json est un format de données pour la communication entre les serveurs Web et les clients en AJAX. Cet article présente principalement un résumé du fonctionnement de json en python, qui a une certaine valeur de référence. Ceux qui sont intéressés peuvent en savoir plus. .

Introduction à Json : Json, nom complet JavaScript Object Notation, est un format d'échange de données léger. L'application la plus largement utilisée de Json est un format de données pour la communication entre les serveurs Web et les clients en AJAX. De nos jours, il est également couramment utilisé dans les requêtes http, il est donc naturel d'apprendre toutes sortes de json. Adresse du site officiel de Python : https://docs.python.org/2/library/json.html?highlight=json#module-json

Utilisation de l'API Json : python doit être téléchargé avant la version 2.6 Le package ne peut être utilisé qu'après l'installation, ce qui est quelque peu similaire à l'utilisation de SeleniumLibrary dans RF aujourd'hui. Mais dans la version 2.6, la documentation officielle (https://docs.python.org/2.6/whatsnew/2.6.html) indique clairement que « de nouveaux packages importants ont été ajoutés à la bibliothèque standard, tels que multiprocessing et json, mais avec Par rapport à Python 3 et 2.6, ces packages n'introduiront pas plus de nouvelles fonctionnalités. "Ainsi, lorsque vous installez des chaussures pour enfants de Python 2.6 ou supérieur, vous n'avez pas besoin de télécharger le package json. Vous pouvez simplement importer json là où vous en avez besoin et utilisez-le après l'installation. Sous Lib dans le répertoire, vous pouvez voir ces deux packages (cliquez dessus et lisez attentivement le code source, vous obtiendrez plus de résultats), comme indiqué ci-dessous : Les versions 6 et supérieures prennent en charge l'encodage et le décodage Json, ainsi que le support. conversion de la plupart des types intégrés de Python avec Json. L'exemple le plus simple est le suivant :

Compréhension approfondie du résumé des opérations de python sur json

Le processus Encode est un processus de conversion d'objets python en objets json. Les deux fonctions couramment utilisées sont les dumps et. fonctions de vidage. La seule différence entre les deux fonctions est que dump convertit les objets python en objets json pour générer un flux de fichier fp, tandis que dumps génère une chaîne :

>>> 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}
Copier après la connexion

Compréhension approfondie du résumé des opérations de python sur jsonL'utilisation des autres paramètres est la même. Les extraits de code suivants sont partiellement appris :

Compréhension approfondie du résumé des opérations de python sur json

Les résultats d'exécution sont les suivants :

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
Copier après la connexion

Si vous modifiez la valeur de la clé 'nom d'utilisateur' dans l'instance par le mot chinois « test », une erreur sera signalée si vous utilisez la première conversion sans ajouter de paramètres, mais la seconde avec paramètres s'exécutera normalement.

Compréhension approfondie du résumé des opérations de python sur json

est en fait un processus de compréhension des paramètres de la fonction. Voici plusieurs paramètres couramment utilisés :

Skipkeys : La valeur par défaut est False, si The. les données dans les clés de dict ne sont pas le type de base de Python (str, unicode, int, long, float, bool, None). Lorsqu'elles sont définies sur False, une TypeError sera signalée. S'il est défini sur True à ce moment, ce type de clé sera ignoréCompréhension approfondie du résumé des opérations de python sur json

ensure_ascii : la valeur par défaut est True. Si le dict contient des caractères non-ASCII, les données seront affichées de manière similaire à uXXXX après l'avoir défini. sur False, vous pouvez Normalement affiché

indent : doit être un entier non négatif S'il est 0 ou vide, les données seront affichées sur une seule ligne. Sinon, la ligne sera renvoyée à la ligne et le blanc précédent. sera affiché en fonction du nombre de retraits, donc le json imprimé Les données sont aussi appelées séparateurs json

joli-imprimés : le séparateur est en fait un tuple de (item_separator, dict_separator), la valeur par défaut est (' ,',':'); cela signifie que les clés du dictionnaire sont séparées par ",", et KEY et value sont séparées par ":".

encodage : La valeur par défaut est UTF-8, qui définit la méthode d'encodage des données json.

sort_keys : Trie les données en fonction de la valeur des clés.

Le processus Decode est un processus de conversion d'objets json en objets python. Les deux fonctions couramment utilisées sont les charges et les fonctions de chargement. La différence est la même que celle des dumps et des dumps.

Les résultats en cours d'exécution sont les suivants :

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)
Copier après la connexion

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

Python-->Json

Compréhension approfondie du résumé des opérations de python sur json

Json-->Python

Compréhension approfondie du résumé des opérations de python sur 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']
Copier après la connexion

运行结果:

Compréhension approfondie du résumé des opérations de python sur json

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

更多Compréhension approfondie du résumé des opérations de python sur json相关文章请关注PHP中文网!


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal