JSON Normalize Input
DescriptionThe JSON Normalize Input transform is similar to JSON Input for sourcing data (file, URL, or a field from a previous transform), but it is built for tabular extraction from JSON documents:
Use this transform when your JSON has a clear list of entities (
Why one JSON document can need several JSON Normalize Input transformsEach transform run picks one Record JsonPath that must resolve to an array. That defines a single output grain: one row per element of that array, with fields taken from that element after flattening. You often still use several JSON Normalize Input transforms on the same pipeline (in parallel branches or one after another) because:
So chaining here is not a limitation of JSON compared to “doing it in one go”; it is the same design choice as picking one repeating array per logical table.
Performance, memory, and wide tablesFlattening is row-oriented and builds a wide field set from deep or branchy JSON:
There is no single safe “normalize everything” default for arbitrary JSON; choosing the right record path is the main lever for both correctness and performance. SamplesSample pipelines and data ship with the JSON transforms plugin under
Pipeline unit tests in |
Options
File tab
Same concepts as JSON Input: source from files / folder, URL, or a field from a previous transform (Source is from a previous transform). See JSON Input – File tab for details.
Content tab
In addition to the usual file and row-limit options (see JSON Input – Content tab), the Content tab adds:
| Option | Description |
|---|---|
Record JsonPath | JsonPath that must evaluate to an array of records. Each element becomes one output row. Examples: |
Field separator | Character(s) placed between path segments when flattening nested objects (default |
Max flatten depth | Maximum object nesting depth to flatten. |
Array handling | How to handle JSON arrays encountered while flattening: stringify (default), single element only, or error. |
Beyond max depth | When max depth is reached: stringify, omit, or error. |
Ignore missing field paths | If enabled, fields listed on the Fields tab that are missing on a given row are set to null instead of failing the row. |
Fields tab
The Fields tab lists output fields to extract from each flattened record (each element selected by Record JsonPath). The table has the following columns:
| Option | Description |
|---|---|
Name | Name of the output field in the Hop stream. |
Path | Flattened key for the value within each record, after nested objects are merged into dotted (or custom-separated) paths. This is not a JsonPath into the whole document—that is what Record JsonPath on the Content tab is for. Examples: |
Type | Data type of the input field. |
Format | An optional mask for converting the format of the original field. See Common Formats for information on common valid date and numeric formats you can use in this transform. |
Length | Length of the field. |
Precision | Number of floating point digits for number-type fields. |
Currency | Currency symbol ($ or €, for example). |
Decimal | A decimal point can be a . (5,000.00 for example) or , (5.000,00 for example). |
Group | A grouping can be a , (10,000.00 for example) or . (5.000,00 for example). |
Trim type | The trim method to apply to a string. |
Repeat | The corresponding value from the last row repeated if a row is empty. |
Select fields
Click Select fields in the Fields tab to open the Select Fields window. Select the checkbox next to each field that you want in the output. All fields chosen here are added to the table. You can search for a field name by entering it in the Search box.
Select fields from snippet
Click Select fields from snippet and paste JSON text—typically one representative object (one element of the array your Record JsonPath selects)—to populate the Name, Path, and Type columns in the Fields tab. This helps discover flattened paths after your Content-tab settings (separator, depth, array handling) are applied.
Dates and timestamps
For Hop types of Date and Timestamp, use the Format column to specify the incoming format. For example, for Date: yyyy-MM-dd. You can select a format from the dropdown or enter format text directly. Hop uses SimpleDateFormat (Java 8).
Examples of Timestamp formats:
-
Format: yyyy-MM-dd’T’HH:mm:ss.SSSZ and Result: 2021-10-26T20:51:43.795+0000
-
Format: 2024-04-22T00:00:00.000Z and Result: 2024-04-22T00:00:00.000Z
Additional output fields tab
The Additional output fields tab contains the following options to add file metadata when the transform reads from files:
| Option | Description |
|---|---|
Short filename field | Specify the field that contains the filename without path information but with an extension. |
Extension field | Specify the field that contains the extension of the filename. |
Path field | Specify the field that contains the path in operating system format. |
Size field | Specify the field that contains the size of the data. |
Is hidden field | Specify the field indicating if the file is hidden or not (Boolean). |
Last modification field | Specify the field indicating the date of the last time the file was modified. |
Uri field | Specify the field that contains the URI. |
Root uri field | Specify the field that contains only the root part of the URI. |