struct-keys
About 1 min
 struct-keys
Outputs all the keys in a structure as a file path
Description
struct-keys outputs all of the keys in a structured data-type eg JSON, YAML, TOML, etc.
The output is a JSON array of the keys with each value being a file path representation of the input structure's node.
Usage
<stdin> -> struct-keys [ depth ] -> <stdout>
<stdin> -> struct-keys [ flags ] -> <stdout>
Examples
The source for these examples will be defined in the variable $example:
» set: json example={
      "firstName": "John",
      "lastName": "Smith",
      "isAlive": true,
      "age": 27,
      "address": {
          "streetAddress": "21 2nd Street",
          "city": "New York",
          "state": "NY",
          "postalCode": "10021-3100"
      },
      "phoneNumbers": [
          {
              "type": "home",
              "number": "212 555-1234"
          },
          {
              "type": "office",
              "number": "646 555-4567"
          },
          {
              "type": "mobile",
              "number": "123 456-7890"
          }
      ],
      "children": [],
      "spouse": null
  }
Without any flags set:
» $example -> struct-keys
[
    "/lastName",
    "/isAlive",
    "/age",
    "/address",
    "/address/state",
    "/address/postalCode",
    "/address/streetAddress",
    "/address/city",
    "/phoneNumbers",
    "/phoneNumbers/0",
    "/phoneNumbers/0/type",
    "/phoneNumbers/0/number",
    "/phoneNumbers/1",
    "/phoneNumbers/1/number",
    "/phoneNumbers/1/type",
    "/phoneNumbers/2",
    "/phoneNumbers/2/type",
    "/phoneNumbers/2/number",
    "/children",
    "/spouse",
    "/firstName"
]
Defining max depth and changing the separator string:
» $example -> struct-keys --depth 1 --separator '.'
[
    ".children",
    ".spouse",
    ".firstName",
    ".lastName",
    ".isAlive",
    ".age",
    ".address",
    ".phoneNumbers"
]
An example of a unicode character being used as a separator:
» $example -> struct-keys --depth 2 --separator ☺
[
    "☺age",
    "☺address",
    "☺address☺streetAddress",
    "☺address☺city",
    "☺address☺state",
    "☺address☺postalCode",
    "☺phoneNumbers",
    "☺phoneNumbers☺0",
    "☺phoneNumbers☺1",
    "☺phoneNumbers☺2",
    "☺children",
    "☺spouse",
    "☺firstName",
    "☺lastName",
    "☺isAlive"
]
Separator can also be multiple characters:
» $example -> struct-keys --depth 1 --separator '|||'
[
    "|||firstName",
    "|||lastName",
    "|||isAlive",
    "|||age",
    "|||address",
    "|||phoneNumbers",
    "|||children",
    "|||spouse"
]
Flags
--depthHow far to traverse inside the nested structure--separatorString to use as a separator between fields (defaults to/)-dAlias for `--depth-sAlias for `--separator
See Also
[[(element): Outputs an element from a nested structure[(index): Outputs an element from an array, map or tableformap: Iterate through a map or other collection of dataset: Define a local variable and set it's value