---
name: infer_json_rows_schema
kind: function
lang: py
domain: core
version: "1.0.0"
purity: pure
signature: "def infer_json_rows_schema(data: object) -> dict"
description: "Dado un JSON deserializado, localiza el primer array de objetos con >=1 elementos y devuelve su schema: root_path, fields [{name, type, sample}], count."
tags: [navegator, json, schema, scraping, pure]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: data
    desc: "JSON deserializado: dict, list, o cualquier valor Python resultante de json.loads()."
output: "dict con {root_path: str, fields: [{name, type, sample}], count: int}. Si no encuentra array de objetos devuelve root_path='' y fields=[]."
tested: true
tests:
  - "lista de dicts directa retorna root_path dolar"
  - "dict con clave results retorna root_path dolar punto results"
  - "input vacio retorna schema vacio"
test_file_path: "python/functions/core/infer_json_rows_schema_test.py"
file_path: "python/functions/core/infer_json_rows_schema.py"
---

## Ejemplo

```python
import sys
sys.path.insert(0, "python/functions")
from core.infer_json_rows_schema import infer_json_rows_schema

schema = infer_json_rows_schema([{"id": 1, "name": "foo"}])
# {"root_path": "$", "fields": [{"name": "id", "type": "int", "sample": "1"}, ...], "count": 1}

schema2 = infer_json_rows_schema({"results": [{"a": "x"}]})
# {"root_path": "$.results", "fields": [...], "count": 1}
```

## Cuando usarla

Cuando recibes JSON de una API o scraping y necesitas descubrir automaticamente que campos contiene y sus tipos, sin conocer la estructura de antemano. Paso previo a generar un recipe YAML o mapear campos a un schema destino.

## Notas

- Prefiere claves `results, items, data, records, rows, entries` en DFS.
- Tipos: string|int|float|bool|null|array|object.
- `sample` truncado a 80 chars de la primera fila.
- Funcion pura: sin I/O, sin estado.
