tojson
Description
Converts events into JSON objects. You can specify which fields get converted by identifying them through exact match or through wildcard expressions. You can also apply specific JSON datatypes to field values using datatype functions. The tojson
command converts multivalue fields into JSON arrays.
When fields are specifically named in a tojson
search, the command generates JSON objects that are limited to the values of just those named fields. If no fields are specified for tojson
, tojson
generates JSON objects for all fields that would otherwise be returned by the search.
Syntax
Required syntax is in bold.
|tojson
[<tojson-function>]...
[default_type=<datatype>]
[fill_null=<boolean>]
[include_internal=<boolean>]
[output_field=<string>]
Optional arguments
tojson-function
Syntax: [auto|bool|json|none|num|str](<wc-field>)...
Description: Applies JSON datatype functions to values of named fields. See Usage for details about how tojson
interprets these datatype functions, and how tojson
applies datatypes to field values when it converts events into JSON objects.
If you provide no fields, the tojson processor creates JSON objects for each event that include all available fields. In other words, it applies none(*)
to the search.
Default: none(*)
default_type
Syntax: default_type=<datatype>
Description: Specifies the datatype that the tojson
processor should apply to fields that aren't specifically associated with a datatype function.
Default: none
fill_null
Syntax: fill_null=<boolean>
Description: When set to true, tojson
outputs a literal null
value when tojson
skips a value. For example, normally, when tojson
tries to apply the json
datatype to a field that does not have proper JSON formatting, tojson
skips the field. However, if fill_null=true
, the tojson
processor outputs a null
value.
Default: false
include_internal
Syntax: include_internal=<boolean>
Description: When set to true, tojson
includes internal fields such as _time
, _indextime
, or _raw
in its JSON object output.
Default: false
output_field
Syntax: output_field=<string>
Description: Specifies the name of the field to which the tojson
search processor writes the output JSON objects.
Default: _raw
Usage
The tojson
command operates on each event as it is returned by the search.
Apply JSON datatypes to field values
The tojson
command applies JSON datatypes to field values according to logic encoded in its datatype functions.
You can assign specific datatype functions to fields when you write a tojson
search. Alternatively, you can name a set of fields without associating them with datatype functions, and then identify a default_type
that tojson
can apply to those unaffiliated fields.
If you do not specify any fields for the tojson
command, the tojson
returns JSON objects for each field that can possibly be returned by the search at that point, and applies the none
datatype function to the values of those fields. The none
datatype function applies the numeric datatype to field values that are purely numeric, and applies the string datatype to all other field values.
The following table explains the logic that the various datatype functions use to apply datatypes to the values of the fields with which they are associated.
Datatype function | Conversion logic |
---|---|
auto | - Converts all values of the specified field into JSON-formatted output. - Automatically determines the field datatypes. - If the value is numeric, the JSON output has a numeric output and includes a literal numeric. - If the value is the string true or false , the JSON output has a Boolean type.- If the value is a literal null , the JSON output has a null type and includes a null value.- If the value is a string other than the previously mentioned strings, tojson examines the string. If it is proper JSON, tojson outputs a nested JSON object. If not, it includes the string as-is. |
bool | - Converts valid values of the specified field to the Boolean datatype and skips invalid values using string validation. - If the value is a number, tojson outputs false only if the value is 0 . Otherwise it outputs true .- If the value is a string, tojson outputs false only if the value is false , f , or no .- tojson outputs true only if the value is true , t , or yes . Other strings are skipped.- Validation is case-insensitive: FALSE , False , F , NO , etc. are interpreted as false . |
json | - Converts all values of the specified field to the JSON type using string validation. - Skips invalid JSON values. - If the value is a number, tojson outputs that number.- If the value is a string, tojson outputs the string as a JSON block.- Invalid JSON values are skipped. |
none | - Outputs all values for the specified field in the JSON type. - No string validation is applied. - Numeric values are output with a numeric type. - String values are output with a string type. |
num | - Converts all values of the specified field to the numeric type using string validation. - If the value is a number, it is output as a numeric type. - If the value is a string, tojson attempts to parse it as a number. Invalid strings are skipped. |
str | - Converts all values of the specified field into the string datatype using string validation. - The tojson processor applies the string type to all values of the specified field, even if they are numbers, Booleans, etc. |
When a field includes multivalues, tojson
outputs a JSON array and applies the datatype function logic to each element of the array.
Examples
1. Convert all events returned by a search into JSON objects
This query converts all events it returns for its time range into JSON-formatted data. Because the search string doesn't assign datatype functions to specific fields, by default tojson
applies the none
datatype function to all fields returned by the search. This means all of their values get either the numeric or string datatypes.
... | tojson
For example, say you start with events that look like this:
12-18-2020 18:19:25.601 +0000 INFO Metrics - group=thruput, name=thruput, instantaneous_kbps=5.821, instantaneous_eps=27.194, average_kbps=5.652, total_k_processed=444500.000, kb=180.443, ev=843, load_average=19.780
After being processed by tojson
, such events have JSON formatting like this:
{ [-]
component: Metrics
date_hour: 18
date_mday: 18
date_minute: 22
date_month: december
date_second: 9
date_wday: friday
date_year: 2020
date_zone: 0
event_message: group=thruput, name=thruput, instantaneous_kbps=2.914, instantaneous_eps=13.903, average_kbps=5.062, total_k_processed=398412.000, kb=90.338, ev=431, load_average=14.690
group: thruput
host: sh1
index: _internal
linecount: 1
log_level: INFO
name: thruput
punct: --_::._+____-_=,_=,_=.,_=.,_=.,_=.,_=.,_=,_=.
sourcetype: siglens
timeendpos: 29
timestartpos: 0
}
2. Specify different datatypes for 'date' fields
The following query converts the results into JSON objects that have only the date_*
fields from each event. The numeric datatype is applied to all date_hour
field values. The string datatype is applied to all other date field values.
... | tojson num(date_hour) str(date_*)
This search produces JSON objects like this:
{ [-]
date_hour: 18
date_mday: 18
date_minute: 28
date_month: december
date_second: 45
date_wday: friday
date_year: 2020
date_zone: 0
}
Note that all fields that don't start with date_
have been stripped from the output.
3. Limit JSON object output and apply datatypes to the field values
This search returns JSON objects only for the name
, age
, and isRegistered
fields. It uses the auto
datatype function to have tojson
automatically apply appropriate JSON datatypes to the values of those fields.
... | tojson auto(name) auto(age) auto(isRegistered)
4. Convert all events into JSON objects and apply appropriate datatypes to all field values
This search converts all of the fields in each event returned by the search into JSON objects. It uses the auto
datatype function in conjunction with a wildcard to apply appropriate datatypes to the values of all fields returned by the search.
... | tojson auto(*)
Notice that this search references the auto
datatype function, which ensures that Boolean, JSON, and null field values are appropriately typed alongside numeric and string values.
Alternatively, you can use default_type
to apply the auto
datatype function to all fields returned by a search:
... | tojson default_type=auto
5. Apply the Boolean datatype to a specific field
This example generates JSON objects containing values of the isInternal
field. It uses the bool
datatype function to apply the Boolean datatype to those field values.
... | tojson bool(isInternal)
6. Include internal fields and assign a 'null' value to skipped fields
This example demonstrates usage of the include_internal
and fill_null
arguments.
... | tojson include_internal=true fill_null=true
7. Designate a default datatype for a set of fields and write the JSON objects to another field
This search generates JSON objects based on the values of four fields. It uses the default_type
argument to convert the first three fields to the num
datatype. It applies the string datatype to a fourth field. Finally, it writes the finished JSON objects to the field my_JSON_field
.
... | tojson age height weight str(name) default_type=num output_field=my_JSON_field