# Data Feeds: JSON, XML & text

> How a payload's text becomes fields.

Glider documentation · Data · Web page: https://cgglider.com/docs/pollers/formats/

Sections of this page: [Transports](https://cgglider.com/docs/pollers.md) · [JSON, XML & text](https://cgglider.com/docs/pollers/formats.md) · [Webhooks](https://cgglider.com/docs/pollers/webhook.md) · [WebSockets](https://cgglider.com/docs/pollers/websocket.md) · [HTTP requests](https://cgglider.com/docs/pollers/compose.md) · [Auth & secrets](https://cgglider.com/docs/pollers/auth.md) · [Mapping the response](https://cgglider.com/docs/pollers/mapping.md) · [Schedule & freshness](https://cgglider.com/docs/pollers/schedule.md) · [Probe & diagnostics](https://cgglider.com/docs/pollers/probe.md)

Format sits next to the transport. Auto picks by the content type, then by the first character of the body. JSON, XML and Plain text force one; a body that does not parse with a forced format degrades the feed instead of painting garbage.

XML is turned into an object, so the Binder tree and field paths work the same as JSON:

```xml
<match id="7">
  <home score="2">Ajax</home>
  <away score="1">PSV</away>
</match>

$.match.@id          → 7
$.match.home.@score  → 2
$.match.home.#text   → "Ajax"
```

- Attributes are @name; the text of an element that also has attributes is #text.
- An element with only text is its value: <name>Ajax</name> reads as name → “Ajax”.
- Repeated elements become a list. A path like $.table.row[0].team also reads a single row, because some feeds send one row as an element rather than a list of one.
- Values that look like numbers become numbers, except ones with a leading zero (“007” stays text).
