# Data to JSON

This function block converts selected input values into a single JSON-formatted string when logging is started. Use the header fields to name each data entry. Only connected data inputs are exported.

## 📥 Inputs <a href="#inputs" id="inputs"></a>

* `Start Logging` (input socket) Controls when the block will collect and export data. Provide a boolean signal to start the export process.
* `Data_1` ... `Data_10` (input sockets) Generic data inputs that can accept numbers, text, lists or other generic values. Only connected inputs are included in the exported JSON.

## 📤 Outputs <a href="#outputs" id="outputs"></a>

* `JSON Data` (output socket) A JSON string containing the currently exported key/value pairs. When `Start Logging` is not active, this output remains empty/None.

## 🕹️ Controls <a href="#controls" id="controls"></a>

* `Data_1 Header` through `Data_10 Header` Text fields where you can enter user-friendly header names for each corresponding data input.
  * Leave a header field empty to use the default label `Data_X` for that input.
  * Only connected inputs will be present in the resulting JSON; unused header fields are ignored.
* `Set Data Headers (UI note)` Informational label in the UI reminding you that empty header fields will be ignored.

## 🎯 Features <a href="#features" id="features"></a>

* Exports multiple generic inputs into a single JSON object.
* Lets you set readable keys using the header controls, or fallback to default `Data_X` keys.
* Automatically includes only the inputs that are actually connected at the time of logging.
* Produces a single JSON string suitable for saving, sending via REST/MQTT, or logging to files.

## ⚙️ Running mechanism <a href="#running-mechanism" id="running-mechanism"></a>

* The block watches the `Start Logging` input. When this input becomes true it:
  * Reads header texts from the ten header fields.
  * Collects values from all connected `Data_1` … `Data_10` inputs.
  * Matches connected inputs to the corresponding headers (or default `Data_X` labels).
  * Constructs a JSON object mapping headers to their input values and outputs that object as a JSON string on `JSON Data`.
* If no logging trigger is given, the block does not produce any JSON output.
* If header count and connected data count do not align, the block raises a UI error message — ensure your headers correspond to the data you intend to export.

## 📝 Usage instructions <a href="#usage" id="usage"></a>

1. Fill the header fields `Data_1 Header` … `Data_10 Header` with meaningful names for the data you plan to export, or leave them empty to use defaults.
2. Connect the sources you want to export into the corresponding `Data_X` input sockets.
3. Send a TRUE signal to `Start Logging` to produce the JSON string on `JSON Data`.
4. Consume the `JSON Data` output with export blocks (file writer, REST publisher, MQTT, etc.) or display it in the UI.

## 💡 Tips and Tricks <a href="#tips-and-tricks" id="tips-and-tricks"></a>

* Combine with measurement and detection blocks to create structured logs:
  * Use outputs from `Object Detection` or `Object Detection - Custom` as inputs to create JSON summaries of detected objects.
  * Feed pose or skeleton coordinates from `Pose Estimation` or `Skeleton Estimation` to export human pose data.
  * Use results from `Find Object`, `Histogram On Line`, or `Measure Position Distance` for analytics and include them in JSON logs.
  * Send OCR outputs from `OCR` or `OCR (EasyOCR)` into this block to export recognized text along with timestamps.
* For persistent storage or continuous logging:
  * Route the `JSON Data` output into `CSV Export`, `Image Logger` (for image-related metadata), or a REST/MQTT block (e.g., `REST API - Post` or `MQTT Publish`) to send data to a server or database.
* Selectively export only connected values:
  * You do not need to populate every header. Only connected `Data_X` sockets are included, so you can wire only the signals you need.

## 🛠️ Troubleshooting <a href="#troubleshooting" id="troubleshooting"></a>

* If no JSON appears when you expect it:
  * Check that `Start Logging` is receiving a TRUE value.
  * Verify that at least one `Data_X` input is connected.
* If field names do not match the exported keys:
  * Ensure the corresponding `Data_X Header` text field is filled. Empty header fields fall back to default `Data_X` keys.
* If an error indicates mismatched counts:
  * Confirm the number of connected inputs matches the headers you expect to use, or explicitly name headers only for the inputs you have connected.
* To forward JSON to an external system:
  * Use blocks such as `REST API - Post`, `MQTT Publish`, or database blocks like `SQL-DB Operations` after this block to deliver or store the JSON payload.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.augelab.com/function-blocks/blocks-reference/data-logic/data-operations/data-to-json.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
