No estoy convencido, hay muchas formas de que Python manipule JSON ~

imagen

Autor: Peter
Fuente: tiempo de programación Python

 

En el trabajo real, especialmente en la transmisión de datos web, a menudo encontramos datos json. No es tan amigable como los datos de texto comunes y los datos numéricos, y es muy similar a los datos de diccionario en Python, lo que ha causado mucha confusión a muchas personas.

Este artículo describe en detalle cómo usar Python y pandas (la biblioteca de terceros de Python) para procesar datos json en combinación con casos específicos. Los contenidos principales incluyen:

  • Introducción a los datos json

  • Sitio web de conversión de datos json de uso común

  • Conversión de datos json y datos de python

  • pandas maneja datos json

Mucha gente aprende Python y no sabe por dónde empezar.
Muchas personas aprenden Python y después de dominar la gramática básica, no saben dónde encontrar casos para comenzar.
Muchas personas que han realizado estudios de casos no saben cómo adquirir conocimientos más avanzados.
Entonces, para estos tres tipos de personas, les proporcionaré una buena plataforma de aprendizaje, ¡gratis para recibir tutoriales en video, libros electrónicos y el código fuente del curso!
Grupo QQ: 721195303

 

1. Una breve introducción a JSON

1.1 ¿Qué son los datos json?

Primero, veamos una explicación de json de Wikipedia:

JSON ( J AVA S cript  O bject  N otation, JavaScript Object Notation) es un lenguaje de intercambio por el concepto y diseño de Douglas Crockford, materiales livianos, el lenguaje facilita la lectura de texto basado en, Se utiliza para transmitir objetos de datos compuestos por valores de atributos O valores secuenciales.

El formato de datos JSON no tiene nada que ver con el idioma. Aunque se deriva de JavaScript, muchos lenguajes de programación actualmente admiten la generación y el análisis de datos en formato JSON. La extensión del archivo es  .json.

A través de la introducción oficial anterior, resumimos 3 puntos:

  • JSON es un lenguaje de texto (datos), un formato de intercambio de datos ultraligero

  • Los datos JSON son fáciles de leer y tienen una gran legibilidad

  • Derivado de JavaScript, otros lenguajes pueden analizar datos JSON

1.2 tipo de datos json

JSON es en realidad un subconjunto de JavaScript, los únicos 6 tipos de datos en el lenguaje JSON o cualquier combinación entre ellos:

  • número: coherente con el número en JavaScript

  • booleano: verdadero o falso en JavaScript

  • cadena: cadena en JavaScript

  • nulo: nulo en JavaScript

  • matriz: representación de JavaScript: []

  • objeto: {…}representación de JavaScript

1.3 Dos reglas

1. El lenguaje JSON estipula que el juego de caracteres debe ser UTF-8.

2. Para analizar de manera uniforme, los requisitos de las cadenas JSON deben ser comillas dobles.""

2. Sitio web de conversión de datos json de uso común

1 、 json.cn : https: //www.json.cn/

2. herramienta json novato: https://c.runoob.com/front-end/53

3. Sojson: https://www.sojson.com/, un sitio web de procesamiento json muy completo

4 、 kjson : https: //www.kjson.com/

5. Programación de la herramienta de verificación Lion-json: https://www.w3cschool.cn/tools/index?name=jsoncheck

6. JSONViewer: http://jsonviewer.stack.hu/, una herramienta de aplicación en línea que se utiliza para verificar si el formato Json es correcto

3. Conversión de tipo JSON y Dict

Esta sección explica principalmente la conversión de datos de tipo json y tipo Python.

jsonPythonLa conversión de objetos y diccionarios utiliza principalmente el jsonpaquete integrado . El uso de este paquete se describe en detalle a continuación. Para obtener materiales de aprendizaje detallados, consulte el sitio web oficial: https://docs.python.org/3/library/json.html

Importe el paquete directamente cuando lo use por primera vez:

import json

jsonHay 4 métodos en el paquete para convertir con los tipos de datos integrados de Python:

método efecto
json.dumps () Codificar un objeto python en una cadena Json: diccionario a json
json.loads () Decodifica la cadena Json en un objeto python: json al diccionario
json.dump () Convierta objetos en python en json y guárdelos en un archivo
json.load () Convierta el formato json en el archivo en un objeto python y extráigalo

Nota: Los dos métodos relacionados con la carga son solo un paso más relacionado con las operaciones de archivos.

json.dumps

Las dos funciones relacionadas con el volcado son convertir el tipo de datos Python al tipo json. La tabla de comparación de conversiones es la siguiente:

Pitón JSON
dictar objeto
lista, tupla formación
str, unicode cuerda
int, largo, flotar número
Cierto cierto
Falso falso
Ninguno nulo

json.dumpsLa función del método es convertir datos del tipo de diccionario de Python en datos en formato json. Los parámetros específicos son los siguientes:

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)

Explique el papel de los parámetros comunes anteriores a través de ejemplos.

1. Cuando hay chino en nuestros datos de tipo Python

information1 = {
    'name': '小明',
    'age': 18,
    'address': 'shenzhen'
}
# 字典转成json数据
information2 = json.dumps(information1)

print(type(information1))
print(type(information2))
print(information2)

 

imagen

Agregue ensure_ascii=Falseparámetros para mostrar chino:

# 字典转成json数据
information3 = json.dumps(information1,ensure_ascii=False)

 

imagen

⚠️A través de los resultados, encontramos que: los datos json se han convertido todos en comillas dobles. Los datos del tipo de diccionario original usaban comillas simples . Veamos un ejemplo del cambio de comillas:

>>> import json
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))  # python中的键是字符串,用单引号

# 结果显示
{
    "4": 5,  # 变成双引号
    "6": 7
}

2. Los datos json se generan maravillosamente a través de la sangría, y se utiliza el parámetro de sangría

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)

 

imagen

3. Ordene y genere las claves en el tipo de datos de 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)

 

imagen

A través de sort_keys=Truela configuración, puede observar que los resultados de salida están ordenados por la primera letra; cuando la primera letra es la misma, la segunda letra se ordenará nuevamente.

4. Control del separador de salida

Utilice separatorsparámetros para establecer diferentes separadores de salida; el valor predeterminado es entre diferentes elementos dic, y el valor predeterminado entre pares clave-valor es:

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)  

 

imagen

json.dump

json.dumpLa función es json.dumpssimilar, pero los datos deben almacenarse en el archivo, los parámetros de los dos son los mismos

Intentamos escribir la siguiente información personal en el archivo

information = {
    'name': '小明',
    'age': 18,
    'skills': 'python',
    'english': 'CET6',
    'major': '会计',
    'address': '深圳'
}

1. Si no se utilizan indentparámetros, toda la información se muestra como una línea

# 使用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)  # 显示中文

Eche un vistazo al efecto de ahorro real:

imagen

La adición de indentparámetros mostrará varias filas de datos:

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) 

imagen

json.loads

Y loaddos funciones relacionadas se convierten en la tabla de conversión de tipo de datos Python json de la siguiente manera:

JSON Pitón
objeto dictar
formación lista
cuerda Unicode
número (int) int, largo
número (real) flotador
cierto Cierto
falso Falso
nulo Ninguno

json.loadsLa función es convertir datos en formato json en datos de tipo diccionario de Python.

information1 = {
    'name': '小明',
    'age': 18,
    'address': 'shenzhen'
}
# 字典转成json数据
information3 = json.dumps(information1,ensure_ascii=False)

information11 = json.loads(information3)  # json转成字典数据
print(information11)

 

imagen

json.load

Abra el archivo json y conviértalo en datos de diccionario

# 使用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. Conversión de tipos JSON y no Dict

La introducción anterior es principalmente la conversión entre los datos en formato json y el diccionario Python. A continuación, se explica la conversión de otros tipos de datos Python json.dumpsen datos json a través de métodos:

1. Conversión de tuplas

imagen

2. Conversión de listas

imagen

3. Conversión booleana

imagen

4. Conversión de datos numéricos

5. Utilice Demjson para analizar

DemjsonPython, biblioteca de terceros que se puede utilizar para codificar y decodificar jsondatos:

  • encode: codifica un objeto Python en una cadena JSON

  • decodificar: decodificar la cadena JSON codificada en un objeto Python

Instalar demjson

Utilice la pip install demjsoninstalación directamente , kan'dao ve la siguiente interfaz para indicar que la instalación se ha realizado correctamente.

imagen

Utilice demjson

Importar antes de usar:

import demjson   # 导入包

1. Función de codificación

imagen

2. Función de decodificación

imagen

demjsonUna desventaja obvia del paquete es que no puede analizar directamente datos chinos:

imagen

Si queremos ver datos chinos, podemos usar la función eval:

imagen

6. Pandas maneja json

A continuación, se describe el procesamiento de datos json por la biblioteca pandas:

  • read_json: leer datos del archivo json

  • to_json: escribe los datos en pandas en el archivo json

  • json_normalize: normaliza datos json

https://geek-docs.com/pandas/pandas-read-write/pandas-reading-and-writing-json.html

6.1 read_json

Primero mire read_jsonlos parámetros en el sitio web oficial :

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)

Para un análisis detallado de los parámetros, consulte el artículo: https://blog.csdn.net/qq_41562377/article/details/90203805

Supongamos que ahora tenemos una copia de los datos json, como se muestra en la siguiente figura:

Leemos los datos anteriores. Dado que los datos están relativamente estandarizados, se pueden leer directamente completando la ruta del archivo:

Concéntrese en explicar los siguientes parámetros orient:

1 、 oriden = 'dividir'

split’ : dict like {index -> [index], columns -> [columns], data -> [values]}

El nombre de la clave del archivo json solo puede ser index,cloumns,dataestos tres, y una clave más no funcionará y una clave menos no funcionará. por ejemplo:

2 、 orient = 'registros'

‘records’ : list like [{column -> value}, … , {column -> value}]

 

3 、 orientar = 'índice'

dict like {index -> {column -> value}}

 

4 、 orientar = 'columnas'

dict like {column -> {index -> value}}

Después de la transposición es orient='index'el resultado anterior

 

 

5 、 orientar = 'valores'

‘values’ : just the values array

 

6.2 to_json

to_jsonEl método es guardar el archivo DataFrame como un archivo json:

df.to_json("个人信息.json")   # 直接保存成json文件

Si guarda de acuerdo con el código anterior, no se muestra chino:

Por supuesto, podemos json.loadvolver a leer el archivo json para mostrar chino, o podemos mostrar chino directamente al guardar:

df.to_json("个人信息1.json",force_ascii=False)   # 显示中文

6.3 json_normalize

https://www.jianshu.com/p/a84772b994a0

Los datos json en el guardado y lectura de los datos json introducidos anteriormente están todos en forma de lista; pero los datos en el archivo json generalmente no están todos en forma de lista, entonces necesitamos convertir el archivo del estructura del diccionario en forma de lista, este proceso se denomina estandarización.

json_normalize()Las funciones en pandas pueden convertir diccionarios o listas en tablas e importarlas antes de usarlas:

from pandas.io.json import json_normalize

Para aprender al mismo tiempo a través del sitio web oficial y un ejemplo práctico, primero mire el ejemplo del sitio web oficial:

1. El diccionario jerárquico muestra datos en forma de atributos:

2. Si se agrega el parámetro max_level, se mostrarán diferentes efectos:

Si max_level = 0, el diccionario anidado se tratará como un todo y se mostrará en el marco de datos

Si max_level = 1, el diccionario anidado se desensamblará y las claves internas se separarán:

3. Lea parte del contenido en el nivel anidado:

4. Leer todo el contenido

7. Resumen

jsonLos datos son un formato de datos que se encuentra a menudo en el trabajo y también son datos muy importantes.

Este artículo primero jsonel formato de datos y una breve introducción, la idea de jsondatos; en segundo lugar, se han transformado varios casos prácticos, voluntad jsony Pythonuna variedad de tipos de datos, especialmente el tipo de diccionario; y finalmente, es importante explicar que los jsondatos se leen, escriben Y operaciones estandarizadas.

Espero que la explicación detallada de este artículo pueda ayudarlo a obtener los jsondatos ~


Todavía quiero recomendar el grupo de aprendizaje de Python que construí por mí mismo : 721195303. Todos los estudiantes del grupo están aprendiendo Python. Si quieres aprender o estás aprendiendo Python, puedes unirte. Todos son parte del desarrollo de software y comparten productos de vez en cuando (solo relacionados con el desarrollo de software de Python), incluida una copia de los últimos materiales avanzados de Python y la enseñanza basada en cero compilada por mí en 2021. ¡Bienvenidos amigos que están avanzados e interesados ​​en Python a unirse!

Supongo que te gusta

Origin blog.csdn.net/aaahtml/article/details/114382845
Recomendado
Clasificación