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 parameters to specify the indexes of the property to retrieve:

```
[<jsondata>jsonget[a]] --> "one"
[<jsondata>jsonget[d],[e]] --> "four"
[<jsondata>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:

```
[<jsondata>jsonget[d],[f],[-1]] --> null
[<jsondata>jsonget[d],[f],[-2]] --> false
[<jsondata>jsonget[d],[f],[-4]] --> "six"
```

Indexes can be dynamically composed from variables and transclusions:

```
[<jsondata>jsonget<variable>,{!!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:

```
[<jsondata>jsontype[a]] --> "string"
[<jsondata>jsontype[d]] --> "object"
[<jsondata>jsontype[d],[f]] --> "array"
[<jsondata>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:

```
[<jsondata>jsonget[d],[f]] --> "five","six","true","false","null"
[<jsondata>jsonget[d],[g]] --> "max","may","maize"
```

The <<.olink jsonindexes>> operator retrieves the corresponding indexes:

```
[<jsondata>jsonindexes[d],[f]] --> "0", "1", "2", "3", "4"
[<jsondata>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:

```
[<jsondata>jsonget[d]] --> "four","five","six","true","false","null","max","may","maize"
```

A subtlety is that the special case of a single blank parameter is used to identify the root object. Thus:

```
[<jsondata>jsonindexes[]] --> "a", "b", "c", "d"
```
