[[json-processor]] === JSON processor ++++ JSON ++++ Converts a JSON string into a structured JSON object. [[json-options]] .Json Options [options="header"] |====== | Name | Required | Default | Description | `field` | yes | - | The field to be parsed | `target_field` | no | `field` | The field to insert the converted structured object into | `add_to_root` | no | false | Flag that forces the serialized json to be injected into the top level of the document. `target_field` must not be set when this option is chosen. include::common-options.asciidoc[] |====== All JSON-supported types will be parsed (null, boolean, number, array, object, string). Suppose you provide this configuration of the `json` processor: [source,js] -------------------------------------------------- { "json" : { "field" : "string_source", "target_field" : "json_target" } } -------------------------------------------------- // NOTCONSOLE If the following document is processed: [source,js] -------------------------------------------------- { "string_source": "{\"foo\": 2000}" } -------------------------------------------------- // NOTCONSOLE after the `json` processor operates on it, it will look like: [source,js] -------------------------------------------------- { "string_source": "{\"foo\": 2000}", "json_target": { "foo": 2000 } } -------------------------------------------------- // NOTCONSOLE If the following configuration is provided, omitting the optional `target_field` setting: [source,js] -------------------------------------------------- { "json" : { "field" : "source_and_target" } } -------------------------------------------------- // NOTCONSOLE then after the `json` processor operates on this document: [source,js] -------------------------------------------------- { "source_and_target": "{\"foo\": 2000}" } -------------------------------------------------- // NOTCONSOLE it will look like: [source,js] -------------------------------------------------- { "source_and_target": { "foo": 2000 } } -------------------------------------------------- // NOTCONSOLE This illustrates that, unless it is explicitly named in the processor configuration, the `target_field` is the same field provided in the required `field` configuration.