Los escenarios de aplicación más comunes para el tipo de datos JSON son las API o guardar datos en datos estables .json. Trabajar con estos datos en Python es muy simple.
Directorio de artículos
JSON
origen JSON
JSON significa Notación de objetos de JavaScript. Un subconjunto del lenguaje de programación JavaScript que maneja la sintaxis literal de objetos. JSON ha sido durante mucho tiempo un lenguaje agnóstico y existe como su propio estándar.
muestra JSON
{
"data":[
{
"id": "1",
"name": "A同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "2",
"name": "B同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "3",
"name": "C同学",
"state": "0",
"createTime": "2020-01-21"
}
]
}
Python admite JSON de forma nativa
Python viene con un paquete integrado json para codificar y decodificar datos JSON.
Método de cita.
import json
El proceso de codificación JSON a menudo se denomina serialización. El término se refiere a convertir datos en una serie de bytes para almacenamiento o transmisión a través de una red. La deserialización es el proceso interactivo de decodificación de datos almacenados o entregados en el estándar JSON.
Serializar JSON
Las conversiones intuitivas convierten objetos simples de Python a JSON.
Pitón | JSON |
---|---|
dictar | objeto |
lista, tupla | formación |
calle | cuerda |
int, largo, flotante | número |
Verdadero | verdadero |
Falso | falso |
Ninguna | nulo |
Ejemplo de serialización simple
Cree un dato simple.
data = {
"data":[
{
"id": "1",
"name": "A同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "2",
"name": "B同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "3",
"name": "C同学",
"state": "0",
"createTime": "2020-01-21"
}
]
}
Los datos se guardan directamente como texto.
with open("data_file.json", "w") as f:
json.dump(data, f)
Los datos se utilizan directamente como una cadena.
json_str = json.dumps(data)
Deserialización de JSON
Utilice load() y loads() en la biblioteca json para convertir datos codificados JSON en objetos de Python.
JSON | Pitón |
---|---|
objeto | dictar |
formación | lista |
cuerda | calle |
número (entero) | En t |
número (coma flotante) | flotar |
verdadero | Verdadero |
falso | Falso |
nulo | Ninguna |
Ejemplo de deserialización simple
Leer datos escritos en un archivo json.
with open("data_file.json", "r") as read_file:
data = json.load(read_file)
Cadena de datos.
json_string = """
{
"data":[
{
"id": "1",
"name": "A同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "2",
"name": "B同学",
"state": "1",
"createTime": "2020-01-21"
},
{
"id": "3",
"name": "C同学",
"state": "0",
"createTime": "2020-01-21"
}
]
}
"""
data = json.loads(json_string)
Aplicaciones
Analice la información de texto a través del raspado de datos de Internet.
# 秦皇岛煤炭网微博
import requests
from bs4 import BeautifulSoup
import datetime
url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid"
post_param = {
'pageNum':'1','pageSize':'20','jsonStr':'{"typeid":"238"}'}
return_data = requests.post(url,data =post_param)
return_data = return_data.content.decode("utf-8")
import json
for i in json.loads(return_data)["rows"]:
title = i["title"]
url = "http://news.cqcoal.com/blank/nc.jsp?mid="+str(i["id"])
timeStamp=int(i["pubdate"])
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
date = dateArray.strftime("%Y-%m-%d")
print(title,url,date)
codificar y decodificar
datos personalizados.
import json
# 基础的数字字典
py_object = {
"c": 0, "b": 0, "a": 0}
# JSON 编码
json_string = json.dumps(py_object)
print(json_string)
print(type(json_string))
{
"c": 0, "b": 0, "a": 0}
<class 'str'>
# JSON 解码
py_obj = json.loads(json_string)
print(py_obj)
print(type(py_obj))
{
'c': 0, 'b': 0, 'a': 0}
<class 'dict'>
Si encuentra TypeError: Object of type SampleClass no es un error serializable JSON, debe personalizar la codificación y decodificación.
import json
class Student:
def __init__(self, name, roll_no, address):
self.name = name
self.roll_no = roll_no
self.address = address
def to_json(self):
'''
将此类的实例转换为 json
'''
return json.dumps(self, indent = 4, default=lambda o: o.__dict__)
class Address:
def __init__(self, city, street, pin):
self.city = city
self.street = street
self.pin = pin
address = Address("Bulandshahr", "Adarsh Nagar", "203001")
student = Student("Raju", 53, address)
# 编码
student_json = student.to_json()
print(student_json)
print(type(student_json))
{
"name": "Raju",
"roll_no": 53,
"address": {
"city": "Bulandshahr",
"street": "Adarsh Nagar",
"pin": "203001"
}
}
<class 'str'>
# 解码
student = json.loads(student_json)
print(student)
print(type(student))
{
'name': 'Raju', 'roll_no': 53, 'address': {
'city': 'Bulandshahr', 'street': 'Adarsh Nagar', 'pin': '203001'}}
<class 'dict'>