JSONFragmenter
Extracts portions of JSON (JavaScript Object Notation) formatted text into new FME features.
Output Ports
For each newly created feature, the attribute identified by the Result Attribute parameter will contain JSON text referred to by the JSON query.
The json_type attribute will contain the JSON type of the text (object, array, string, etc) and the json_index parameter will contain the object key or array index of the JSON value.
If the JSON query cannot be fully evaluated, a message will be logged, and the translation will continue.
If Reject Features which Produce No Fragments is set to Yes, features that produce no fragments will be output through this port.
Features that could not be successfully processed will also be output through this port. Typically this happens when the attribute specified in the JSON Attribute parameter does not have a value, or has a value that is not valid JSON.
Parameters
Source
Allows for selecting between one of two options for JSON input: JSON Attribute or File/URL
If selected, The JSON document can come from any string expression specified by an attribute value or a workspace parameter.
If selected, the JSON source can be read from a local file at a specified file path, or from the internet at a specified URL.
Parameters
The JSON Query parameter is the JSON query referring to the JSON values which will become new FME features.
This parameter can be typed directly in the text box or, if reading JSON from a file or URL, by clicking the browse button that opens a dialog containing the structure of the JSON dataset in a tree form. Selecting a value from the tree will populate the parameter with the appropriate query string to turn the selected values into features.
A JSON query is a mechanism to refer to values inside JSON text. The outermost JSON value, which must be an object or an array, is always referred to by the term "json". Contained values can be referred to using JavaScript-like square bracket index operators. A value in an array can be referred to using its zero-based position in the array (for example, json[2] for the third element).
A value in an object can be referred to using its object key name. For example:
json["key"]
All of the values in an array or object can be referred to collectively using a wildcard index. For example:
json[*]
The query used by this transformer can have multiple expressions, separated by a '+' operator. This allows the transformer to refer to values in different areas of the JSON text. For example:
json["resultSet_1"][*] + json["resultSet_2"][*]
See below for more information on JSON queries.
If the JSON text is in GeoJSON or EsriJSON format, you can select Fragment as Format to GEOJSON or ESRIJSON. This will inform JSONQueryFactory that GeoJSON or ESRIJSON features need to be automatically recognized and extracted from the query results.
The default format, JSON, parses the JSON text as plain JSON. If no GeoJSON or ESRIJSON features were constructed, a warning will be issued and the text will be treated as plain JSON.
If this parameter is Yes, features which produce no fragments will be output through the <Rejected> port.
If the JSONFragmenter is set to read JSON from a feature attribute, then the output is automatically written to the input attribute. If, however, the JSONFragmenter is set to read JSON from a file or URL, then an output attribute must be selected. This is done in the Result Attribute field which is activated when Input Source is set to File/URL. The output attribute may be selected from existing input attributes, user-defined parameters, or a new attribute may also be created.
Flattening Parameters
If the JSON query produces a JSON Object, the keys may be used to produce additional attributes for the new feature(s) by setting to Yes. If the JSON query produces a JSON array, and a value is provided to the Prefix New Attributes With parameter, a list attribute will be created, using the prefix as the list name, and the JSON array values as the list elements.
Note: List attributes are not accessible from the output schema in Workbench unless they are first processed using a transformer that operates on them, such as ListExploder or ListConcatenator. Alternatively, AttributeExposer can be used.
When the Flatten Query Result into Attributes parameter is set to Yes, this parameter controls the attributes which are created. If it is set to No, each JSON object key will become an attribute and the corresponding JSON value will become the attribute value. If this parameter is set to Yes, only object values which are simple types (integers, strings, etc) will become attribute values, while nested objects and arrays will be recursively flattened.
If the Flatten Query Result into Attributes parameter is set to Yes, the Prefix New Attributes With parameter may be used to provide a string with which to prefix the newly-created attributes. If the selected format is GeoJSON or ESRIJSON, the format-specific keys will not be added as attributes, but will instead be handled by the appropriate format parser.
Exposes any attributes so they can be used by other transformers. Type directly in the text box or click the browse button to display the editor and add attributes there.
JSON Queries
A JSON query is a simple mechanism to refer to values within a JSON document. A query is made up of one or more expressions, which are separated by a + operator. There are three types of expressions: JSON structure expressions, JSON property expressions and string literal expressions.
JSON Structure Expressions
A JSON structure expression can refer to values in a JSON document. The outermost JSON element, which must be an array or an object, is always referred to by the term json, and this term must appear at the beginning of every JSON structure expression. The child elements can be referred to using JavaScript-like square bracket index operators. For example, if the outermost element is an array, the first element of the array can be referred to by the expression json[0], the second element can be referred to by the expression json[1], and so on. Likewise, if the outermost JSON element is an object, with keys "name" and "address", then the values of these keys can be referred to by the expressions json["name"] and json["address"] respectively.
These index operators can be cascaded. For example, it the outermost JSON element is an object with a key and "address" whose value is an object containing keys "city" and "province", then these values can be referred to by the expressions json["address"]["city"] and json["address"]["province"].
In order to refer to all of the values in an array or object, a wildcard index * can be used. For example, if the outermost JSON element is an array, then the expression json[*] refers to every element in the array.
JSON Property Expressions
A property expression is a structure expression as described above, followed by a . (dot) operator and a property name. Currently, the only supported properties are type and size. The type property returns the type of the JSON value referred to by the JSON structure expression. For example, if the outermost JSON element is an array, and the first element of the array is a string, then the expression json[0].type would have a value of string. The size property, which can only be applied to an array, returns the number of elements in the array.
String Literal Expressions
A string literal expression is simply a quoted string value, such as "this is a string literal expression".
FME Licensing Level
FME Professional edition and above
Editing Transformer Parameters
Using a set of menu options, transformer parameters can be assigned by referencing other elements in the workspace. More advanced functions, such as an advanced editor and an arithmetic editor, are also available in some transformers. To access a menu of these options, click beside the applicable parameter. For more information, see Transformer Parameter Menu Options.
Transformer Categories
Search FME Community
Search for samples and information about this transformer on the FME Community.
Keywords: JSONExploder