logo
GeekFormat

JSON a Python

Eina en línia gratuïta JSON a Python que converteix automàticament dades JSON en classes Python @dataclass amb anotacions de tipus. Les cadenes es converteixen en str, els enters en int, els floats en float, els booleans en bool, els arrays en List[T], els objectes anidats generen dataclasses independents, null es converteix en Optional[Any]. Execució local al navegador, copia en un clic o descarrega model.py.

Relacionats

Sobre JSON a Python: Convertir dades JSON en models dataclass executables

JSON a Python és el procés de convertir dades en format JSON en definicions de tipus @dataclass Python.

@dataclass és una funció de la biblioteca estàndard introduïda a Python 3.7 (PEP 557).

El reconeixement de tipus és el cor de JSON a Python.

A diferència d'algunes eines en línia, tots els càlculs d'aquesta eina es fan al navegador.

El codi generat es pot utilitzar directament en projectes Python.

El codi generat automàticament és un punt de partida, no un punt final.

dataclass vs Pydantic BaseModel vs attrs vs TypedDict.

JSON a Python té valor únic a l'ecosistema Data Science.

Altres eines opcionals a l'ecosistema Python: marshmallow, cattrs, pydantic, apischema.

En escenaris CLI i automatització.

Rendiment i mantenibilitat amb frozen=True i slots=True.

Casos d'ús

  • Integració REST API
  • Models petició/resposta FastAPI
  • Serialitzadors Django Ninja / DRF
  • Modelatge de dades Scraper
  • Definició de features ML
  • Deserialització de fitxers de configuració
  • Estructura temporal Jupyter Notebook
  • Definició d'interfície de microserveis
  • Desenvolupament d'eines CLI
  • Construcció de dades de prova
  • Anàlisi de logs estructurats
  • Migració de centre de configuració
  • Col·laboració cross-language
  • Migració de bases de dades
  • Blockchain/Web3
  • ETL Data Science
  • Validació d'esquema OpenAPI
  • Exemples didàctics
  • Conversió de noms de camp

Com usar-ho

  1. Enganxa el contingut JSON a l'editor de l'esquerra o carrega un fitxer
  2. Espera 400ms per a la conversió automàtica
  3. Si el JSON està mal format fes clic a «Repara JSON»
  4. Fes clic a «Copiar» o «Descarrega» per guardar model.py

Característiques

  • Conversió local al navegador
  • Sortida amb anotacions dataclass
  • Reconeixement automàtic de tipus
  • Divisió automàtica d'objectes anidats
  • Resolució automàtica de genèrics List
  • Camps Optional opcionals
  • Conversió automàtica amb debounce de 400ms
  • Correcció d'errors JSON en un clic
  • Copiar i descarregar
  • Historial d'entrada localStorage
  • Panells responsius redimensionables
  • Suporta postprocessament Pydantic/attrs/TypedDict

Exemples de codi

Python: Parsing resposta API amb requests a dataclass generada

python
# requirements.txt
# requests>=2.31

from dataclasses import dataclass
from typing import Any, List, Optional
import json
import requests


@dataclass
class Address:
    city: str
    zip: str


@dataclass
class User:
    id: int
    name: str
    active: bool
    address: Address
    tags: List[str]
    label: Optional[Any] = None


def main() -> None:
    resp = requests.get("https://api.example.com/users/1", timeout=10)
    resp.raise_for_status()
    user: User = User(**resp.json())
    print(f"{user.name} lives in {user.address.city}")


if __name__ == "__main__":
    main()

Python: FastAPI utilitza model generat per a validació de body (versió Pydantic)

python
# pip install fastapi 'pydantic>=2'

from typing import List, Optional
from fastapi import FastAPI
from pydantic import BaseModel


class Address(BaseModel):
    city: str
    zip: str


class User(BaseModel):
    id: int
    name: str
    email: str
    active: bool = True
    address: Address
    tags: List[str] = []
    label: Optional[str] = None


app = FastAPI()


@app.post("/users")
async def create_user(user: User) -> dict:
    return {"id": user.id, "name": user.name}

Best Practices

L'exemple JSON ha de contenir valors d'exemple per a tots els camps

Proporciona valors d'exemple per a camps clau per obtenir tipus precisos.

JSON complexos preferiblement dividits en múltiples dataclasses

Divideix en múltiples fitxers si el nombre de camps supera 50.

Canvia a Pydantic BaseModel si cal validació en runtime

Per a projectes FastAPI o si cal validació, utilitza Pydantic.

Combina mypy per a comprovacions de tipus en la fase CI

Afegeix mypy src/ --strict al pipeline CI.

Evita valors per defecte mutables en camps dataclass

Utilitza field(default_factory=list) en lloc de = [].

El model.py descarregat s'ha de col·locar en un paquet models independent

Estructura recomanada: src/models/__init__.py + submòduls.

JSON sensibles s'han de processar localment

Utilitza aquesta eina (execució local) per a JSON sensibles.

Python 3.10+ activa slots per estalviar memòria

Utilitza @dataclass(slots=True) a Python 3.10+ per a millor rendiment.

Preguntes freqients

Com converteixo JSON a una dataclass Python?

Enganxa el contingut JSON a l'editor de l'esquerra o carrega un fitxer.

El codi Python generat inclou anotacions dataclass?

Sí, genera el decorador @dataclass i els imports necessaris.

Quines estructures de dades JSON són compatibles?

Compatibilitat amb totes les estructures JSON vàlides: tipus primitius, arrays, objectes anidats.

Com es mapegen els tipus de camp JSON als tipus Python?

Cadenes→str, enters→int, floats→float, booleans→bool, arrays→List[T], objectes anidats→@dataclass, null→Optional[Any].

Quin tipus es genera per als valors null?

Els valors null generen Optional[Any].

Els arrays es converteixen a List?

Sí, els arrays JSON es converteixen a List[T].

Com es tracten els objectes anidats?

Cada objecte anidat genera una classe @dataclass independent.

Puc personalitzar el nom de la classe generada?

Sí, pots modificar manualment els noms després de la generació.

El codi generat es pot utilitzar directament en un projecte?

Sí, assegura't de tenir un entorn Python 3.7+.

Puc convertir a Pydantic BaseModel en lloc de dataclass?

Sí, substitueix @dataclass per class Xxx(BaseModel): i importa des de pydantic.

Les dades s'envien al servidor? La privacitat és segura?

Execució completament local al navegador, cap dada s'envia a servidors.

Cal registrar-se o iniciar sessió?

No. L'eina és completament gratuïta, sense registre.

Què fer si el format JSON és incorrecte?

Fes clic al botó «Repara JSON» per corregir errors comuns automàticament.

Convertir JSON grans és lent?

Per a JSON majors de 10MB recomanem l'eina CLI quicktype.

Solució de problemes

Missatge «Introdueix dades JSON» o costat dret buit

L'entrada és buida. Assegura't d'haver enganxat JSON vàlid.

Missatge parsing JSON fallit

Causes habituals: coma final, cometes simples en lloc de dobles, claus sense cometes, comentaris JavaScript.

Tipus de camp generats no prou precisos

Modifica els tipus manualment després de la generació.

Camp null ha generat Optional[Any] en lloc d'Optional[str]

El tipus concret no es pot deduir de null.

Error d'importació del fitxer .py descarregat

Possibles causes: versió Python inferior a 3.7, conflictes de noms.

Camps JSON snake_case no coincideixen amb l'estil Python

Utilitza alias_generator de Pydantic o reanomena manualment.

La pàgina es congela amb JSON molt grans

Recomanem dividir el JSON o utilitzar l'eina CLI.

Error de validació de body FastAPI (422)

Canvia el tipus de camp a Optional[Typo] = None.

Glossari

dataclass
Decorador de la biblioteca estàndard Python 3.7+ (@dataclass) per generar automàticament màgics.
Mòdul typing
Biblioteca estàndard Python per a anotacions de tipus.
Optional[T]
Tipus opcional del mòdul typing.
List[T]
Tipus de llista genèrica de Python.
Any
Tipus especial que accepta qualsevol tipus.
Pydantic BaseModel
Classe base per a models de dades de la biblioteca Pydantic.
FastAPI
Framework web Python modern basat en Pydantic.
PEP 557
Proposta que defineix la sintaxi del decorador dataclass.
Anotació de tipus (Type Hint)
Indicació de tipus anotada després de paràmetres i variables.
PEP 484
Proposta d'estàndard per a anotacions de tipus a Python.
from __future__ import annotations
Instrucció per avaluació retardada d'anotacions (PEP 563).
model.py
Nom de fitxer per defecte descarregat per aquesta eina.

Taula de referència ràpida tipus JSON → tipus Python

L'eina dedueix automàticament el tipus Python corresponent:

Exemple valor JSONTipus Python generatExplicació
nullOptional[Any]Valor null incert
true / falseboolBooleans JSON → bool
42intEnters JSON → int
3.14floatFloats JSON → float
"hello"strCadenes JSON → str
["a","b"]List[str]Arrays de cadenes → List[str]
[1,2,3]List[int]Arrays d'enters → List[int]
[{...},{...}]List[Item]Arrays d'objectes → List[Item]
[]List[Any]Array buit
{...} objecte anidat@dataclass independentObjectes anidats generen @dataclass independent

Privacy & Security

Totes les operacions d'aquesta eina JSON a Python passen completament de forma local al navegador: el parsing JSON, la generació de codi Python i la descàrrega de fitxers s'executen totes al costat del client mitjançant JavaScript, cap contingut JSON, fitxers carregats o codi generat s'envia per la xarxa a servidors.

Authoritative References