JSON / XMLComing soon
Load structured documents as datasets — from an upload, a URL, or a bucket.
The JSON / XML connector parses structured documents into typed rows. Use it for exports, API snapshots, and system feeds that arrive as files rather than as a database.
Not available yet
The JSON / XML connector is in development. For file-based data today, use CSV / Excel — most systems that export JSON can also export a flat file.
Where the documents come from
| Origin | Setup |
|---|---|
| Upload | Drag a file onto Add data |
| HTTPS URL | A stable URL Chartizer fetches on a schedule |
| S3 / GCS | Bucket, prefix, and read-only credentials; newest matching object wins |
| Email drop | A team address; matching attachments are ingested |
Finding the rows
A document is a tree; a dataset is rows. Records path tells Chartizer which node to repeat.
{
"meta": { "generated": "2026-08-12T09:00:00Z" },
"data": {
"items": [
{ "id": 1, "customer": { "email": "ana@example.com" }, "tags": ["vip", "eu"] },
{ "id": 2, "customer": { "email": "bo@example.com" }, "tags": [] }
]
}
}
Records path data.items produces two rows.
<export generated="2026-08-12T09:00:00Z">
<orders>
<order id="1">
<customer email="ana@example.com"/>
<total currency="EUR">149.00</total>
</order>
</orders>
</export>
Records path export.orders.order produces one row per <order>.
Zero rows almost always means the wrong records path
data when the array is really at data.items is the single most common mistake. The preview
shows the parsed row count before you create the dataset — check it is not zero.
Flattening
Nested objects flatten with dot notation. XML attributes become fields prefixed with @, and
element text becomes #text when the element also carries attributes.
| Source | Field | Value |
|---|---|---|
{"customer":{"email":"ana@…"}} |
customer.email |
ana@example.com |
{"tags":["vip","eu"]} |
tags |
["vip","eu"] |
<order id="1"> |
@id |
1 |
<total currency="EUR">149.00</total> |
total.@currency |
EUR |
total.#text |
149.00 |
Arrays stay arrays
Array fields are preserved rather than exploded into rows. If you need one row per tag, set the records path deeper or split the file upstream.
Types
Types are inferred from a sample of up to 500 records.
| Setting | Default | Notes |
|---|---|---|
| Date format | ISO-8601 | Override with a format string, e.g. DD.MM.YYYY |
| Decimal separator | . |
Set to , for European exports |
| Empty string | null |
Can be kept as an empty value instead |
| Encoding | UTF-8 |
Windows-1257 and ISO-8859-1 supported |
XML has no types at all — everything arrives as text unless you set the field type explicitly.
Leading zeros and long IDs
An identifier like 0041 or a 19-digit number will be read as a number and mangled. Set those
fields to text before creating the dataset.
Scheduled fetches
{
"type": "json",
"source": {
"kind": "s3",
"bucket": "acme-exports",
"prefix": "orders/",
"pattern": "orders-*.json"
},
"records_path": "data.items",
"refresh": { "policy": "scheduled", "interval": "24h" }
}
{
"type": "xml",
"source": {
"kind": "url",
"url": "https://partner.example.com/feed/inventory.xml",
"headers": { "Authorization": "Bearer {{secrets.PARTNER_TOKEN}}" }
},
"records_path": "feed.inventory.item",
"refresh": { "policy": "scheduled", "interval": "1h" }
}
Never put a secret in the URL
Query strings are logged by proxies and appear in sync history. Put credentials in headers, using team secrets.
Replacing documents
A new file replaces the data while keeping the dataset identity — its ID, mappings, and every
chart built on it survive. Schema differences behave as they do for
CSV / Excel: a new field triggers Schema drift, a missing one shows a
broken-field marker on charts using it.
Limits
| Limit | Value |
|---|---|
| Max file size | 100 MB (Pro), 25 MB (Free) |
| Max nesting depth | 32 levels |
| Max fields after flattening | 512 |
Deeply nested documents belong in a database
If flattening produces hundreds of fields, load the documents into PostgreSQL or Elasticsearch and connect that instead. Syncs get faster and the schema stops shifting under you.
Troubleshooting
Fields appear and disappear between syncs
The producer omits null fields. Chartizer keeps the schema from the first sync, so absent fields arrive as null rather than being dropped.
XML namespaces break the records path
Use the local name without the prefix, or set Strip namespaces on the dataset.
Everything landed in one row
The records path points at the root instead of the repeating node. Set it to the repeating element.
Parse error at line N
Malformed document — usually a truncated download or an unescaped & in XML. The error names the
offending line.