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.
json
Python
La conversión de objetos y diccionarios utiliza principalmente el json
paquete 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
json
Hay 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.dumps
La 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)
Agregue ensure_ascii=False
parámetros para mostrar chino:
# 字典转成json数据
information3 = json.dumps(information1,ensure_ascii=False)
⚠️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)
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)
A través de sort_keys=True
la 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 separators
pará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)
json.dump
json.dump
La función es json.dumps
similar, 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 indent
pará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:
La adición de indent
pará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)
json.loads
Y load
dos 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.loads
La 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)
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.dumps
en datos json a través de métodos:
1. Conversión de tuplas
2. Conversión de listas
3. Conversión booleana
4. Conversión de datos numéricos
5. Utilice Demjson para analizar
Demjson
Sí Python
, biblioteca de terceros que se puede utilizar para codificar y decodificar json
datos:
-
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 demjson
instalación directamente , kan'dao ve la siguiente interfaz para indicar que la instalación se ha realizado correctamente.
Utilice demjson
Importar antes de usar:
import demjson # 导入包
1. Función de codificación
2. Función de decodificación
demjson
Una desventaja obvia del paquete es que no puede analizar directamente datos chinos:
Si queremos ver datos chinos, podemos usar la función eval:
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_json
los 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,data
estos 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_json
El 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.load
volver 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
json
Los 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 json
el formato de datos y una breve introducción, la idea de json
datos; en segundo lugar, se han transformado varios casos prácticos, voluntad json
y Python
una variedad de tipos de datos, especialmente el tipo de diccionario; y finalmente, es importante explicar que los json
datos se leen, escriben Y operaciones estandarizadas.
Espero que la explicación detallada de este artículo pueda ayudarlo a obtener los json
datos ~