created: 20220611104737314 modified: 20220611104737314 tags: [[Filter Operators]] [[JSON Operators]] title: jsonget Operator caption: jsonget op-purpose: retrieve the value of a property from JSON strings op-input: a selection of JSON strings op-parameter: one or more indexes of the property to retrieve op-output: the values of each of the retrieved properties <<.from-version "5.2.4">> See [[JSON in TiddlyWiki]] for background. The <<.op jsonget>> operator is used to retrieve values from JSON data as strings. See also the following related operators: * <<.olink jsontype>> to retrieve the type of a JSON value * <<.olink jsonindexes>> to retrieve the names of the fields of a JSON object, or the indexes of a JSON array * <<.olink jsonextract>> to retrieve a JSON value as a string of JSON Properties within a JSON object are identified by a sequence of indexes. In the following example, the value at `[a]` is `one`, and the value at `[d][f][0]` is `five`. ``` { "a": "one", "b": "", "c": "three", "d": { "e": "four", "f": [ "five", "six", true, false, null ], "g": { "x": "max", "y": "may", "z": "maize" } } } ``` The following examples assume that this JSON data is contained in a variable called `jsondata`. The <<.op jsonget>> operator uses multiple operands to specify the indexes of the property to retrieve: ``` [jsonget[a]] --> "one" [jsonget[d],[e]] --> "four" [jsonget[d],[f],[0]] --> "five" ``` <<.from-version "5.3.2">> Negative indexes into an array are counted from the end, so -1 means the last item, -2 the next-to-last item, and so on: ``` [jsonget[d],[f],[-1]] --> null [jsonget[d],[f],[-2]] --> false [jsonget[d],[f],[-4]] --> "six" ``` Indexes can be dynamically composed from variables and transclusions: ``` [jsonget,{!!field},[0]] ``` Boolean values and null are returned as normal strings. The <<.olink jsontype>> operator can be used to retrieve a string identifying the original type. Thus: ``` [jsontype[a]] --> "string" [jsontype[d]] --> "object" [jsontype[d],[f]] --> "array" [jsontype[d],[f],[2]] --> "boolean" ``` Using the <<.op jsonget>> operator to retrieve an object or an array returns a list of the values. For example: ``` [jsonget[d],[f]] --> "five","six","true","false","null" [jsonget[d],[g]] --> "max","may","maize" ``` The <<.olink jsonindexes>> operator retrieves the corresponding indexes: ``` [jsonindexes[d],[f]] --> "0", "1", "2", "3", "4" [jsonindexes[d],[g]] --> "x", "y", "z" ``` If the object or array contains nested child objects or arrays then the values are retrieved recursively and returned flattened into a list. For example: ``` [jsonget[d]] --> "four","five","six","true","false","null","max","may","maize" ``` A subtlety is that the special case of a single blank operand is used to identify the root object. Thus: ``` [jsonindexes[]] --> "a", "b", "c", "d" ```