Nushell
Get Nu!
Getting Started
  • The Nushell Book
  • Command Reference
  • Cookbook
  • Language Reference Guide
  • Contributing Guide
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
Get Nu!
Getting Started
  • The Nushell Book
  • Command Reference
  • Cookbook
  • Language Reference Guide
  • Contributing Guide
Blog
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
  • Categories

    • Bits
    • Bytes
    • Chart
    • Conversions
    • Core
    • Database
    • Dataframe
    • Dataframe Or Lazyframe
    • Date
    • Debug
    • Default
    • Env
    • Experimental
    • Expression
    • Filesystem
    • Filters
    • Formats
    • Generators
    • Hash
    • History
    • Lazyframe
    • Math
    • Misc
    • Network
    • Path
    • Platform
    • Plugin
    • Prompt
    • Random
    • Removed
    • Shells
    • Strings
    • System
    • Viewers

from kdl for formats

Convert KDL text into structured data.

Signature

> from kdl {flags}

Flags

  • --spec {int}: KDL language version (1 or 2 (default)).
  • --format {string}: Data model: 'nodes' (default) for KDL AST rows, or 'jik' for JSON-in-KDL values.
  • --ignore-types: Ignore type annotations (return base KDL types only).

Input/output types:

inputoutput
stringany

Examples

Convert KDL to node rows (default format, KDL v2).

> "node attr=1 attr2=#true {bloc}" | from kdl
╭───┬──────┬────────────────┬──────────────────┬─────────────────────────────────────────────────────────────╮
│ # │ name │      args      │      props       │                          children                           │
├───┼──────┼────────────────┼──────────────────┼─────────────────────────────────────────────────────────────┤
│ 0 │ node │ [list 0 items] │ ╭───────┬──────╮ │ ╭───┬──────┬────────────────┬───────────────────┬─────────╮ │
│   │      │                │ │ attr  │ 1    │ │ │ # │ name │      args      │       props       │ childre │ │
│   │      │                │ │ attr2 │ true │ │ │   │      │                │                   │ n       │ │
│   │      │                │ ╰───────┴──────╯ │ ├───┼──────┼────────────────┼───────────────────┼─────────┤ │
│   │      │                │                  │ │ 0 │ bloc │ [list 0 items] │ {record 0 fields} │ [list 0 │ │
│   │      │                │                  │ │   │      │                │                   │  items] │ │
│   │      │                │                  │ ╰───┴──────┴────────────────┴───────────────────┴─────────╯ │
╰───┴──────┴────────────────┴──────────────────┴─────────────────────────────────────────────────────────────╯

Parse a package-style KDL document into node rows.

> 'package { name nu; version 0.1; description "new type of shell" }' | from kdl
╭───┬─────────┬────────────────┬───────────────────┬─────────────────────────────────────────────────────────╮
│ # │  name   │      args      │       props       │                        children                         │
├───┼─────────┼────────────────┼───────────────────┼─────────────────────────────────────────────────────────┤
│ 0 │ package │ [list 0 items] │ {record 0 fields} │ ╭───┬─────────────┬───────────────────────────┬───┬───╮ │
│   │         │                │                   │ │ # │    name     │           args            │ p │ c │ │
│   │         │                │                   │ │   │             │                           │ r │ h │ │
│   │         │                │                   │ │   │             │                           │ o │ i │ │
│   │         │                │                   │ │   │             │                           │ p │ l │ │
│   │         │                │                   │ │   │             │                           │ s │ d │ │
│   │         │                │                   │ │   │             │                           │   │ r │ │
│   │         │                │                   │ │   │             │                           │   │ e │ │
│   │         │                │                   │ │   │             │                           │   │ n │ │
│   │         │                │                   │ ├───┼─────────────┼───────────────────────────┼───┼───┤ │
│   │         │                │                   │ │ 0 │ name        │ ╭───┬────╮                │ { │ [ │ │
│   │         │                │                   │ │   │             │ │ 0 │ nu │                │ r │ l │ │
│   │         │                │                   │ │   │             │ ╰───┴────╯                │ e │ i │ │
│   │         │                │                   │ │   │             │                           │ c │ s │ │
│   │         │                │                   │ │   │             │                           │ o │ t │ │
│   │         │                │                   │ │   │             │                           │ r │   │ │
│   │         │                │                   │ │   │             │                           │ d │ 0 │ │
│   │         │                │                   │ │   │             │                           │   │   │ │
│   │         │                │                   │ │   │             │                           │ 0 │ i │ │
│   │         │                │                   │ │   │             │                           │   │ t │ │
│   │         │                │                   │ │   │             │                           │ f │ e │ │
│   │         │                │                   │ │   │             │                           │ i │ m │ │
│   │         │                │                   │ │   │             │                           │ e │ s │ │
│   │         │                │                   │ │   │             │                           │ l │ ] │ │
│   │         │                │                   │ │   │             │                           │ d │   │ │
│   │         │                │                   │ │   │             │                           │ s │   │ │
│   │         │                │                   │ │   │             │                           │ } │   │ │
│   │         │                │                   │ │ 1 │ version     │ ╭───┬──────╮              │ { │ [ │ │
│   │         │                │                   │ │   │             │ │ 0 │ 0.10 │              │ r │ l │ │
│   │         │                │                   │ │   │             │ ╰───┴──────╯              │ e │ i │ │
│   │         │                │                   │ │   │             │                           │ c │ s │ │
│   │         │                │                   │ │   │             │                           │ o │ t │ │
│   │         │                │                   │ │   │             │                           │ r │   │ │
│   │         │                │                   │ │   │             │                           │ d │ 0 │ │
│   │         │                │                   │ │   │             │                           │   │   │ │
│   │         │                │                   │ │   │             │                           │ 0 │ i │ │
│   │         │                │                   │ │   │             │                           │   │ t │ │
│   │         │                │                   │ │   │             │                           │ f │ e │ │
│   │         │                │                   │ │   │             │                           │ i │ m │ │
│   │         │                │                   │ │   │             │                           │ e │ s │ │
│   │         │                │                   │ │   │             │                           │ l │ ] │ │
│   │         │                │                   │ │   │             │                           │ d │   │ │
│   │         │                │                   │ │   │             │                           │ s │   │ │
│   │         │                │                   │ │   │             │                           │ } │   │ │
│   │         │                │                   │ │ 2 │ description │ ╭───┬───────────────────╮ │ { │ [ │ │
│   │         │                │                   │ │   │             │ │ 0 │ new type of shell │ │ r │ l │ │
│   │         │                │                   │ │   │             │ ╰───┴───────────────────╯ │ e │ i │ │
│   │         │                │                   │ │   │             │                           │ c │ s │ │
│   │         │                │                   │ │   │             │                           │ o │ t │ │
│   │         │                │                   │ │   │             │                           │ r │   │ │
│   │         │                │                   │ │   │             │                           │ d │ 0 │ │
│   │         │                │                   │ │   │             │                           │   │   │ │
│   │         │                │                   │ │   │             │                           │ 0 │ i │ │
│   │         │                │                   │ │   │             │                           │   │ t │ │
│   │         │                │                   │ │   │             │                           │ f │ e │ │
│   │         │                │                   │ │   │             │                           │ i │ m │ │
│   │         │                │                   │ │   │             │                           │ e │ s │ │
│   │         │                │                   │ │   │             │                           │ l │ ] │ │
│   │         │                │                   │ │   │             │                           │ d │   │ │
│   │         │                │                   │ │   │             │                           │ s │   │ │
│   │         │                │                   │ │   │             │                           │ } │   │ │
│   │         │                │                   │ ╰───┴─────────────┴───────────────────────────┴───┴───╯ │
╰───┴─────────┴────────────────┴───────────────────┴─────────────────────────────────────────────────────────╯

Parse JSON-in-KDL (v2 keywords use #true / #null).

> '- a=1 b=#true' | from kdl --format jik
╭───┬──────╮
│ a │ 1    │
│ b │ true │
╰───┴──────╯

Parse KDL v2 keyword arguments with --spec 2 (default).

> "node #true #false #null" | from kdl --spec 2
╭───┬──────┬───────────────┬───────────────────┬────────────────╮
│ # │ name │     args      │       props       │    children    │
├───┼──────┼───────────────┼───────────────────┼────────────────┤
│ 0 │ node │ ╭───┬───────╮ │ {record 0 fields} │ [list 0 items] │
│   │      │ │ 0 │ true  │ │                   │                │
│   │      │ │ 1 │ false │ │                   │                │
│   │      │ │ 2 │       │ │                   │                │
│   │      │ ╰───┴───────╯ │                   │                │
╰───┴──────┴───────────────┴───────────────────┴────────────────╯

Parse KDL v1 keyword arguments with --spec 1 (bare true/false/null).

> "node true false null" | from kdl --spec 1
╭───┬──────┬───────────────┬───────────────────┬────────────────╮
│ # │ name │     args      │       props       │    children    │
├───┼──────┼───────────────┼───────────────────┼────────────────┤
│ 0 │ node │ ╭───┬───────╮ │ {record 0 fields} │ [list 0 items] │
│   │      │ │ 0 │ true  │ │                   │                │
│   │      │ │ 1 │ false │ │                   │                │
│   │      │ │ 2 │       │ │                   │                │
│   │      │ ╰───┴───────╯ │                   │                │
╰───┴──────┴───────────────┴───────────────────┴────────────────╯

Parse a KDL v1 property boolean with --spec 1.

> "item 1 enabled=true" | from kdl --spec 1
╭───┬──────┬───────────┬────────────────────┬────────────────╮
│ # │ name │   args    │       props        │    children    │
├───┼──────┼───────────┼────────────────────┼────────────────┤
│ 0 │ item │ ╭───┬───╮ │ ╭─────────┬──────╮ │ [list 0 items] │
│   │      │ │ 0 │ 1 │ │ │ enabled │ true │ │                │
│   │      │ ╰───┴───╯ │ ╰─────────┴──────╯ │                │
╰───┴──────┴───────────┴────────────────────┴────────────────╯

Parse a KDL v2 property boolean with --spec 2.

> "item 1 enabled=#true" | from kdl --spec 2
╭───┬──────┬───────────┬────────────────────┬────────────────╮
│ # │ name │   args    │       props        │    children    │
├───┼──────┼───────────┼────────────────────┼────────────────┤
│ 0 │ item │ ╭───┬───╮ │ ╭─────────┬──────╮ │ [list 0 items] │
│   │      │ │ 0 │ 1 │ │ │ enabled │ true │ │                │
│   │      │ ╰───┴───╯ │ ╰─────────┴──────╯ │                │
╰───┴──────┴───────────┴────────────────────┴────────────────╯

Parse JSON-in-KDL written in KDL v1 keyword style.

> '- a=1 b=true c=null' | from kdl --format jik --spec 1
╭───┬──────╮
│ a │ 1    │
│ b │ true │
│ c │      │
╰───┴──────╯

Duplicate sibling node names are preserved in-order.

> "node one; node two" | from kdl
╭───┬──────┬─────────────┬───────────────────┬────────────────╮
│ # │ name │    args     │       props       │    children    │
├───┼──────┼─────────────┼───────────────────┼────────────────┤
│ 0 │ node │ ╭───┬─────╮ │ {record 0 fields} │ [list 0 items] │
│   │      │ │ 0 │ one │ │                   │                │
│   │      │ ╰───┴─────╯ │                   │                │
│ 1 │ node │ ╭───┬─────╮ │ {record 0 fields} │ [list 0 items] │
│   │      │ │ 0 │ two │ │                   │                │
│   │      │ ╰───┴─────╯ │                   │                │
╰───┴──────┴─────────────┴───────────────────┴────────────────╯

Promote Nushell type annotations on node arguments (filesize, duration).

> "node (filesize)1024 (duration)5000000000" | from kdl
╭───┬──────┬────────────────┬───────────────────┬────────────────╮
│ # │ name │      args      │       props       │    children    │
├───┼──────┼────────────────┼───────────────────┼────────────────┤
│ 0 │ node │ ╭───┬────────╮ │ {record 0 fields} │ [list 0 items] │
│   │      │ │ 0 │ 1.0 kB │ │                   │                │
│   │      │ │ 1 │   5sec │ │                   │                │
│   │      │ ╰───┴────────╯ │                   │                │
╰───┴──────┴────────────────┴───────────────────┴────────────────╯

Parse JSON-in-KDL with filesize, duration, and datetime (timestamp) annotations.

> '- size=(filesize)1024 wait=(duration)5000000000 when=(timestamp)"2020-01-02T03:04:05+00:00"' | from kdl --format jik
╭──────┬─────────────╮
│ size │ 1.0 kB      │
│ wait │ 5sec        │
│ when │ 6 years ago │
╰──────┴─────────────╯

Accept (datetime) as an alias for (timestamp) when parsing.

> '- when=(datetime)"2020-01-02T03:04:05+00:00"' | from kdl --format jik
╭──────┬─────────────╮
│ when │ 6 years ago │
╰──────┴─────────────╯

Parse cell-path, range, glob, and binary type annotations.

> '- path=(cell-path)$.1.abc span=(range)"1..3" pat=(glob)*.rs blob=(binary)AQID' | from kdl --format jik
╭──────┬───────────╮
│ path │ $.1.abc   │
│ span │ 1..3      │
│ pat  │ *.rs      │
│ blob │ [1, 2, 3] │
╰──────┴───────────╯

Ignore type annotations and keep base KDL types with --ignore-types.

> '- size=(filesize)1024' | from kdl --format jik --ignore-types
╭──────┬──────╮
│ size │ 1024 │
╰──────┴──────╯

JiK: multiple '-' children are a list, not an object with duplicate keys.

> '- { - a=1; - a=2 }' | from kdl --format jik
╭───┬───╮
│ # │ a │
├───┼───┤
│ 0 │ 1 │
│ 1 │ 2 │
╰───┴───╯

JiK: a sole '-' child is still a one-element list unless annotated (object).

> '- { - 1 }' | from kdl --format jik
╭───┬───╮
│ 0 │ 1 │
╰───┴───╯

JiK: object with key '-' must use the (object) annotation.

> '(object)- { - 1 }' | from kdl --format jik
╭───┬───╮
│ - │ 1 │
╰───┴───╯