Skip to main content

Alter Data Structure (alter / ~>)

Laurence MorganAbout 3 minBuiltin CommandsStructured Data ManagementData Manipulation

Alter Data Structure (alter / ~>)

Change a value within a structured data-type and pass that change along the pipeline without altering the original source input

Description

alter a value within a structured data-type.

The path separator is defined by the first character in the path. For example /path/to/key, ,path,to,key, |path|to|key and #path#to#key are all valid however you should remember to quote or escape any special characters (tokens) used by the shell (such as pipe, |, and hash, #).

The value must always be supplied as JSON.

When working with expressions, you may find the Assign or Merge operator more ergonomic (read more)

Usage

<stdin> -> alter [ -m | --merge | -s | --sum ] /path value -> <stdout>

<stdin> ~> value -> <stdout>

Examples

Altering an objects value

» config -> [ shell ] -> [ prompt ] -> alter /Value moo
{
    "Data-Type": "block",
    "Default": "{ out 'murex » ' }",
    "Description": "Interactive shell prompt.",
    "Value": "moo"
}

Inserting JSON

alter also accepts JSON as a parameter for adding structured data:

config -> [ shell ] -> [ prompt ] -> alter /Example { "Foo": "Bar" }
{
    "Data-Type": "block",
    "Default": "{ out 'murex » ' }",
    "Description": "Interactive shell prompt.",
    "Example": {
        "Foo": "Bar"
    },
    "Value": "{ out 'murex » ' }"
}

Data-type aware

It is also data type aware so if they key you're updating holds a string (for example) then the JSON data a will be stored as a string:

» config -> [ shell ] -> [ prompt ] -> alter /Value { "Foo": "Bar" }
{
    "Data-Type": "block",
    "Default": "{ out 'murex » ' }",
    "Description": "Interactive shell prompt.",
    "Value": "{ \"Foo\": \"Bar\" }"
}

Numbers will also follow the same transparent conversion treatment:

» tout json { "one": 1, "two": 2 } -> alter /two "3"
{
    "one": 1,
    "two": 3
}

Please note: alter is not changing the value held inside config but instead took the stdout from config, altered a value and then passed that new complete structure through it's stdout.

If you require modifying a structure inside Murex config (such as http headers) then you can use config alter. Read the config docs for reference.

-m / --merge

Thus far all the examples have be changing existing keys. However you can also alter a structure by appending to an array or a merging two maps together. You do this with the --merge (or -m) flag.

» out a\nb\nc -> alter --merge / ([ "d", "e", "f" ])
a
b
c
d
e
f

-s / --sum

This behaves similarly to --merge where structures are blended together. However where a map exists with two keys the same and the values are numeric, those values are added together.

» tout json { "a": 1, "b": 2 } -> alter --sum / { "b": 3, "c": 4 }
{
    "a": 1,
    "b": 5,
    "c": 4
}

Flags

  • --merge Merge data structures rather than overwrite
  • --sum Sum values in a map, merge items in an array
  • -m Alias for --merge
  • -s Alias for --sum

Detail

Path

The path parameter can take any character as node separators. The separator is assigned via the first character in the path. For example

config -> alter .shell.prompt.Value moo
config -> alter >shell>prompt>Value moo

Just make sure you quote or escape any characters used as shell tokens. eg

config -> alter '#shell#prompt#Value' moo
config -> alter ' shell prompt Value' moo

Supported data-types

The value field must always be supplied as JSON however the stdin struct can be any data-type supported by murex.

You can check what data-types are available via the runtime command:

runtime --marshallers

Marshallers are enabled at compile time from the builtins/data-types directory.

Alter operator

~> is a synonym for alter --merge /, for example:

» tout json %[1 2 3] ~> %[4 5 6]
[
    1,
    2,
    3,
    4,
    5,
    6
]

Synonyms

  • alter
  • ~>

See Also


This document was generated from builtins/core/datatools/alter_doc.yamlopen in new window.

Last update:
Contributors: Laurence Morgan,Laurence Morgan,Laurence