Declarative JSON-to-JSON transformation engine with a built-in template language
Project description
Motor de transformación declarativa de JSON con lenguaje de plantillas integrado.
Instalación
pip install catnose
Uso rápido
API
from catnose import transform
items = [{"id": 1, "first_name": "Ana", "role": "admin"}]
mapper = {
"id": "id",
"name": "first_name",
"role": {
"_cases": {
"admin": "Administrador",
"user": "Usuario",
"_default": "Otro"
}
},
"label": {"_value": "{{ name }} ({{ role }})"}
}
result = transform(items, mapper)
# [{"id": 1, "name": "Ana", "role": "Administrador", "label": "Ana (Administrador)"}]
CLI
catnose input.json transform.json
catnose input.json transform.json -o output.json
La entrada puede ser un array JSON o un objeto JSON. Si es un objeto, se trata
como una lista de un único elemento y recibe _rownum = 1.
Formato del mapeador
El JSON transformado parte de un objeto vacío; sólo se incluyen los campos declarados explícitamente. El JSON original actúa como contexto de evaluación junto con los campos ya calculados (en orden de definición).
{
"<campo_destino>": "<campo_origen>",
"<campo_destino>": {
"_name": "<campo_origen>",
"_cases": {"v1": "nuevo_v1", "_default": "<por_defecto>"},
"_value": "cadena con {{ expr }}"
},
"<campo_lista>": {
"<sub_campo>": {
"_name": "<campo_origen>",
"_cases": {"v1": "nv1"},
"_value": "{{ expr }}"
}
}
}
| Clave | Descripción |
|---|---|
"<campo>": "<origen>" |
Shorthand — copia el valor de <origen> del JSON original |
_name |
Campo fuente en el JSON original (por defecto: la clave del mapper) |
_cases |
Tabla de sustitución de valores; _default se usa si no hay coincidencia |
_value |
Plantilla evaluada con el motor de expresiones |
Un mapping dict sin ninguna clave de control (_name, _cases, _value) se trata como lista de objetos, aplicando los sub-mapeos a cada elemento.
Motor de plantillas
Las expresiones _value usan la sintaxis {{ expr }} con evaluación Python completa. También se soportan bloques {% for %}, {% if %} / {% else %} / {% endif %}:
{
"summary": {"_value": "{{ title.upper() }} — {{ cwss_score }} puntos"},
"tags": {"_value": "{% for t in tags %}[{{ t }}]{% endfor %}"}
}
El contexto de evaluación incluye:
- Todos los campos del JSON original
- Los campos ya calculados por mappings anteriores (en orden)
_rownum(1..N, posición del elemento en el array; si la entrada es un objeto único, vale1)
Para campos de tipo lista, el contexto incluye además los campos de cada elemento de la lista.
Historial de cambios
1.1.0
transformacepta ahora un objeto JSON (dict) además de un array. Si la entrada es un objeto, devuelve un objeto en lugar de una lista.- CLI actualizado para admitir ficheros de entrada que sean un objeto JSON único, asignándole
_rownum = 1.
1.0.1
- Añadido logotipo del proyecto.
1.0.0
rownumrenombrado a_rownumen el contexto de evaluación para evitar colisiones con campos del JSON original._parse_listeliminada del API pública (era un detalle de implementación interno).
0.0.1
- Versión inicial: motor de transformación declarativa, motor de plantillas
{{ expr }}/{% for %}/{% if %}, y CLI.
Licencia
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file catnose-1.1.0.tar.gz.
File metadata
- Download URL: catnose-1.1.0.tar.gz
- Upload date:
- Size: 273.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48cd9f6fa01a381b1a4dba37033629908034f2d08f4c524db8477828b63a08e7
|
|
| MD5 |
c81770ec84bc206e528c8043125bd9a4
|
|
| BLAKE2b-256 |
873e3a6619aaa7888ed5224254e2023b36633a87c8b23cc4c7ff0f395729d2b7
|
File details
Details for the file catnose-1.1.0-py3-none-any.whl.
File metadata
- Download URL: catnose-1.1.0-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f03522b9dd3588cc158a7423b710b1fc933c311f840c712578334d537aad1ac8
|
|
| MD5 |
b229310160d5423f43292e9e5978bf79
|
|
| BLAKE2b-256 |
822a1714b85088945c2c0b14fe0dcbfedc4f598c3caded18c2b1add2ba57ef5f
|