Declarative JSON-to-JSON transformation engine with a built-in template language
Project description
catnose
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
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)
Para campos de tipo lista, el contexto incluye además los campos de cada elemento de la lista.
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.0.0.tar.gz.
File metadata
- Download URL: catnose-1.0.0.tar.gz
- Upload date:
- Size: 204.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c1919e24ec4396f4dd8b70d3f1a7127ea462103fc9b777895560700621ec7a9
|
|
| MD5 |
27c70e9e003f85077d23fb493131a737
|
|
| BLAKE2b-256 |
37691227a3167a29d2b50022a8b31e5661fba02e4a0a745202c2f4072a8f00b0
|
File details
Details for the file catnose-1.0.0-py3-none-any.whl.
File metadata
- Download URL: catnose-1.0.0-py3-none-any.whl
- Upload date:
- Size: 7.9 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 |
3af3fe3c2518f59f9887050aea316f6fd10835204c9d079e07e86d850a206d72
|
|
| MD5 |
b0e892d1bcc835d820e598becfa0bbc7
|
|
| BLAKE2b-256 |
0e4790a3cfd05cd92b5d426cb0e67f8e7e5b3eda9fb450f1649c50887c6de45d
|