Dasel - Select, put and delete data from JSON, TOML, YAML, XML and CSV files with a single tool.

dasel

Gitbook Go Report Card PkgGoDev Test Build codecov Mentioned in Awesome Go GitHub All Releases Downloads GitHub License GitHub tag (latest by date) Homebrew tag (latest by date)

Dasel (short for data-selector) allows you to query and modify data structures using selector strings.

Comparable to jq / yq, but supports JSON, YAML, TOML, XML and CSV with zero runtime dependencies.

One tool to rule them all

Say good bye to learning new tools just to work with a different data format.

Dasel uses a standard selector syntax no matter the data format. This means that once you learn how to use dasel you immediately have the ability to query/modify any of the supported data types without any additional tools or effort.

Update Kubernetes Manifest

Table of contents

Quickstart

Dasel is available on homebrew, ASDF, scoop, docker or as compiled binaries from the latest release.

brew install dasel

You can also install a development version with:

go install github.com/tomwright/dasel/cmd/dasel@master

For more information see the installation documentation.

Select

echo '{"name": "Tom"}' | dasel -p json '.name'
"Tom"

See select documentation.

Put

echo '{"name": "Tom"}' | dasel put string -p json '.email' '[email protected]'
{
  "email": "[email protected]",
  "name": "Tom"
}

See put documentation.

Delete

echo '{
  "email": "[email protected]",
  "name": "Tom"
}' | dasel delete -p json '.email' '[email protected]'
{
  "name": "Tom"
}

See delete documentation.

Issue vs Discussion

I have enabled discussions on this repository.

I am aware there may be some confusion when deciding where you should communicate when reporting issues, asking questions or raising feature requests so this section aims to help us align on that.

Please raise an issue if:

  • You find a bug.
  • You have a feature request and can clearly describe your request.

Please open a discussion if:

  • You have a question.
  • You're not sure how to achieve something with dasel.
  • You have an idea but don't quite know how you would like it to work.
  • You have achieved something cool with dasel and want to show it off.
  • Anything else!

Features

Documentation

The official dasel docs can be found at daseldocs.tomwright.me.

Playground

You can test out dasel commands using the playground.

Source code for the playground can be found at github.com/TomWright/daselplayground.

Benchmarks

In my tests dasel has been up to 3x faster than jq and 15x faster than yq.

See the benchmark directory.

Comments
  • How do I create a new yaml document

    How do I create a new yaml document

    Hello @TomWright ,

    Small question, but I am unable to figure it out, how do I create this yaml output?

    metadata:
      annotations:
         node.longhorn.io/default-disks-config: '[ { "name":"fast",  "path":"/mnt/data-fast1", "allowScheduling":true, "tags":["fast"]}, { "name":"slow",  "path":"/mnt/data-slow1", "allowScheduling":true, "tags":["slow"]} ]'
      labels:
        node.longhorn.io/create-default-disk: config
    

    Thanks!

  • Add file read/write support to Go package

    Add file read/write support to Go package

    Add helper functions/receivers to make it easer to read/write files.

    Functions

    • NewFromFile function which accepts filename and parser strings.
    • NewFromReader function which accepts Reader and parser strings.

    Receivers

    • WriteFile receiver which accepts filename, parser string and compact / escapeHTML options.
    • Write receiver which accepts Writer, parser string and compact / escapeHTML options.

    Misc

    • Fix parser descriptions

    Closes #187

  • support for a validation command

    support for a validation command

    Is your feature request related to a problem? Please describe. dasel is awesome! since i love it too much and although dasel is not a validator, i do use it as such.

    Describe the solution you'd like i would love to see an option to provide dasel with a list of files (of any supported types), and have dasel report whether any error is found. e.g.

    $ dasel validate dir/foo.json dir/foo.yaml
    pass dir/foo.json
    fail dir/foo.yaml
    $ echo $?
    1
    
    $ dasel validate 'dir/**/*.{json,yaml}'
    pass dir/foo.json
    fail dir/foo.yaml
    $ echo $?
    1
    

    Describe alternatives you've considered wrapping dasel with a helper

    find . -type f -name '*.yaml' -o -name '*.json' | while read f; do dasel -f $f; done
    
  • support for a validation pre-commit hooks

    support for a validation pre-commit hooks

    Pre-commit hooks for dasel validate.

    Notes

    1. The version specified in the documentation (v1.25.1) refers to a new release that includes .pre-commit-hooks.yaml
    2. ~The version specified in .pre-commit-config.yaml (master) will work only after merging this change. For testing (see below) the commit hash for this pull-request should be used (e.g. https://github.com/TomWright/dasel/pull/232/commits/1217e03c614c14d0c98b0a7cdc5c65e93132b378). This file is optional, and needed only if pre-commit is not in used for maintaining dasel project~
    3. ~I couldn't find the source code for the documentation files to update them accordingly, and that is the reason that the link in the Features section is left empty. If you will point me to them, I would love to make a contribution~

    Tests

    Execute pre-commit within the repository (added for sanity tests)

    $ pre-commit run -a dasel-validate --verbose
    Validate JSON, YAML, XML, TOML...........................................Failed
    - hook id: dasel-validate
    - duration: 0.04s
    - exit code: 1
    
    fail tests/assets/broken.json could not load input: could not unmarshal data: invalid character '}' after array element
    pass benchmark/data.json
    pass benchmark/data.yaml
    pass .github/workflows/codeql-analysis.yml
    Error: 1 files failed validation
    pass tests/assets/example.yaml
    pass .github/FUNDING.yml
    pass .github/workflows/build-test.yaml
    pass benchmark/data/nested_property.json
    pass benchmark/data/root_object.json
    pass benchmark/data/delete_property.json
    pass .github/workflows/build.yaml
    pass tests/assets/deployment.yaml
    pass tests/assets/example.json
    pass .github/workflows/build-dev.yaml
    pass benchmark/data/array_index.json
    pass benchmark/data/list_array_keys.json
    pass .github/workflows/bump-homebrew.yaml
    pass benchmark/data/top_level_property.json
    pass .pre-commit-hooks.yaml
    pass tests/assets/example.xml
    fail tests/assets/broken.xml could not load input: could not unmarshal data: xml.Decoder.Token() - XML syntax error on line 1: element <a> closed by </b>
    pass benchmark/data/append_array_of_strings.json
    pass .github/workflows/test.yaml
    pass codecov.yaml
    Error: 1 files failed validation
    pass benchmark/data/overwrite_object.json
    pass benchmark/data/update_string.json
    

    cc @TomWright

  • Can not set negative integer value in command line

    Can not set negative integer value in command line

    Describe the bug Can not set negative value in command line , it'll treated as a command line flag rather than a value, and the escape character does not work.

    To Reproduce Steps to reproduce the behavior:

    #  dasel put int -p toml -f /etc/containerd/config.toml '.oom_score' '-900'
    Error: unknown shorthand flag: '9' in -900
    
    #  dasel put int -p toml -f /etc/containerd/config.toml '.oom_score' "\-900"
    Error: could not parse int [\-900]: strconv.ParseInt: parsing "\\-900": invalid syntax
    Usage:
      dasel put int -f <file> -s <selector> <value> [flags]
    
    Flags:
      -h, --help   help for int
    
    Global Flags:
      -f, --file string       The file to query.
      -m, --multiple          Select multiple results.
      -o, --out string        Output destination.
      -p, --parser string     Shorthand for -r FORMAT -w FORMAT.
      -r, --read string       The parser to use when reading.
      -s, --selector string   The selector to use when querying the data structure.
      -w, --write string      The parser to use when writing.
    
    Error: could not parse int [\-900]: strconv.ParseInt: parsing "\\-900": invalid syntax
    

    Desktop (please complete the following information):

    • OS: linux/ubuntu 18.06
    • Version: dasel version v1.11.0-2-gbe51ab2
  • PUT a multi-line file inside a YAML key

    PUT a multi-line file inside a YAML key

    Is your feature request related to a problem? Please describe.

    I could not find a way to edit a YAML file and insert a multi-line plain text document (e.g. a certificate in PEM file format) as a yaml key value (e.g. `-w yaml -s 'server.ssl.certificates.[0].certificate')

    Describe the solution you'd like

    dasel put string -f conf/config.yaml -w yaml -s 'server.ssl.certificates.[0].certificate' < ./certificates/certificate-chain.pem
    

    Had to find an alternative, used yq like this:

    cat ./config-template.yaml \
      | yq --yaml-roundtrip ".server.ssl.certificates[0].certificate = \"$(cat ./certificates/certificate-chain.pem)\"" \
      | yq --yaml-roundtrip ".server.ssl.certificates[0].privateKey = \"$(cat ./certificates/private.key)\"" \
      > ./conf/config.yaml
    
  • How do I do with this kind of error

    How do I do with this kind of error

    Describe the desired outcome Using dasel to select json file, but this error occur

    Error: could not load input: could not unmarshal config data: invalid character '{' after top-level value

    Resources My json file content is like this {"topic": "test", "device_info": {"device_name": "apple"}, "message": "failed"}

  • Question on replacing value(s) single and multiple occurrences

    Question on replacing value(s) single and multiple occurrences

    Hello,

    I was pointed out by someone that this tool was better to replace (multiple) values in a yaml file than using sed. I have tried some examples, but it is not clear to me how to replace certain values in https://raw.githubusercontent.com/c4po/harbor_exporter/master/kubernetes/harbor-exporter.yaml

    I need to replace multiple occurrences in this file, however, I am only able to select 1. How do I add a line with the namespace value?

    metadata:
      name: harbor-exporter
    
    

    to

    metadata:
      name: harbor-exporter
      namespace: test
    

    Next to this, I also need to replace the value of "- harbor #......" to test and keep the remaining lines and this is failing with dasel put string -f he.yaml -s "spec.namespaceSelector.matchNames" "test"

      namespaceSelector:
        matchNames:
        - harbor # change to the namespace where you deployed Harbor
    

    Thanks!

  • Support handling of Struct types

    Support handling of Struct types

    First of all, thank you for this awesome OSS @TomWright


    Is your feature request related to a problem? Please describe.

    I have the use case of using a package like Dasel programmatically to manipulate runtime objects.

    Without going into specific examples, runtime objects does not only have Slices and Maps, but also Structs.


    Describe the solution you'd like

    I'd like Dasel to also support Structs (that are very similar functionally to Maps) when doing operations.

    I've already made some local changes to dasel and it seems to work just fine. An example:

    If we add the following else if to findValueProperty (https://github.com/TomWright/dasel/blob/master/node_query.go#L66):

    if value.Kind() == reflect.Map {
    	...
    } else if value.Kind() == reflect.Struct {
    	fieldV := value.FieldByName(n.Selector.Property)
    	  
    	if fieldV.IsValid() {
    		return fieldV, nil
    	}
    	return nilValue(), &ValueNotFound{Selector: n.Selector.Current, PreviousValue: n.Previous.Value}
    }
    

    Then query is able to operate on interface{} that contain Structs.


    Describe alternatives you've considered

    I have an alternative private package that does similar functions to Dasel, and I'm in the ideation phase of open-sourcing it, and I would have liked to base it on Dasel, the only thing that stops me doing so ATM is the support for Structs.


    As a last note, I'll be happy to help in integrating such a change into Dasel and would like your opinion.

    Thanks!

  • Characters in strings getting replaced with unicode escape

    Characters in strings getting replaced with unicode escape

    Describe the bug < char in json strings is getting replaced with \u003c. Similar thing happens to >.

    To Reproduce Steps to reproduce the behavior:

    1. Create file with this content:
    {
      "name": "John Doe <[email protected]>"
    }
    
    1. dasel -f filename.json
    {
      "name": "John Doe \[email protected]\u003e"
    }
    

    Expected behavior No characters changed.

    Desktop (please complete the following information):

    • OS: macOS
    • Version 1.20.0
  • Multiple selectors

    Multiple selectors

    Is your feature request related to a problem? Please describe. I would like to construct the selector output to allow multiple fields to be selected. Either by passing multiple -s flags or adding multiple selector filters to the cli. Similar to the way jq allows multiple fields to be selected. Ideally this would work with csv write parser so I can choose which fields are output

    Describe the solution you'd like Using your example json here https://github.com/TomWright/dasel/blob/master/benchmark/data.json I would like to display the following output

    first,last,model
    Tom,Wright,8 Pro
    Tom,Wright,iPhone 12
    

    Using a command something like this

    dasel -p json -m '.user.name.first .user.name.last user.phones[*].model'
    

    Describe alternatives you've considered Sending the data to jq first to select the data into the correct data structure and then use dasel to only convert the output.

    Additional context My current goal is to take kubectl get output and recreate the standard fields as csv. Right now I have to run kubectl to get the headers, run it again to get all the json, filter it with jq, pass it to dasel to change the output from json to CSV

  • `dasel put -t json -s 'array.[]' -v

    `dasel put -t json -s 'array.[]' -v "{…}"` to a TOML file crashes dasel

    Describe the bug dasel put fails to write more than one complex element (of type JSON, which is apparently how one denotes an object regardless of the target format) to an array in a TOML file.

    To Reproduce Steps to reproduce the behavior:

    $ touch test.toml
    $ dasel put -f test.toml -t json -s "array.[]" -v "{ \"key\": \"value\" }"
    $ cat test.toml
    array = [{ key = "value" }]
    $ dasel put -f test.toml -t json -s "array.[]" -v "{ \"key\": \"value\" }"
    panic: reflect.Set: value of type []interface {} is not assignable to type []map[string]interface {}
    
    goroutine 1 [running]:
    reflect.Value.assignTo({0x104b89c80?, 0x1400012d5d8?, 0x104ba5ea0?}, {0x104a0a05d, 0xb}, 0x104b89ec0, 0x0)
            reflect/value.go:3145 +0x214
    reflect.Value.Set({0x104b89ec0?, 0x1400012d170?, 0x94?}, {0x104b89c80?, 0x1400012d5d8?, 0x140003562d0?})
            reflect/value.go:2160 +0xc8
    github.com/tomwright/dasel.Value.Append({{0x104b9eba0, 0x140002e9e50, 0x94}, 0x14000328540, 0x140003285b0, 0x140003562d0})
            github.com/tomwright/dasel/value.go:239 +0x17c
    github.com/tomwright/dasel.glob..func3(0xf000000000000006?, 0x16?, {0x104faf9c8?, 0x14000356390?, 0x140002dae20?})
            github.com/tomwright/dasel/func_append.go:26 +0x25c
    github.com/tomwright/dasel.BasicFunction.Run(...)
            github.com/tomwright/dasel/func.go:140
    github.com/tomwright/dasel.(*Step).execute(0x1400014e960)
            github.com/tomwright/dasel/step.go:30 +0x5c
    github.com/tomwright/dasel.(*Context).Next(0x14000275300)
            github.com/tomwright/dasel/context.go:225 +0x1cc
    github.com/tomwright/dasel.(*Context).Run(0x104be5480?)
            github.com/tomwright/dasel/context.go:193 +0x34
    github.com/tomwright/dasel.Put({0x104be5480, 0x14000356180}, {0x16b8cb9aa, 0x8}, {0x104be5480?, 0x14000356150?})
            github.com/tomwright/dasel/context.go:128 +0xa0
    github.com/tomwright/dasel/internal/command.runPutCommand(0x14000331cc8, 0x1049e0ca7?)
            github.com/tomwright/dasel/internal/command/put.go:132 +0x4ac
    github.com/tomwright/dasel/internal/command.putRunE(0x14000338300?, {0x14000275200, 0x0, 0x8?})
            github.com/tomwright/dasel/internal/command/put.go:83 +0x304
    github.com/spf13/cobra.(*Command).execute(0x14000338300, {0x14000275180, 0x8, 0x8})
            github.com/spf13/[email protected]/command.go:916 +0x5c8
    github.com/spf13/cobra.(*Command).ExecuteC(0x14000338000)
            github.com/spf13/[email protected]/command.go:1044 +0x35c
    github.com/spf13/cobra.(*Command).Execute(...)
            github.com/spf13/[email protected]/command.go:968
    main.main()
            github.com/tomwright/dasel/cmd/dasel/main.go:10 +0x24
    $ dasel put -f test.toml -t json -s "array.[]" -v 123
    panic: reflect.Set: value of type []interface {} is not assignable to type []map[string]interface {}
    
    goroutine 1 [running]:
    reflect.Value.assignTo({0x1055fdc80?, 0x1400012d578?, 0x105619ea0?}, {0x10547e05d, 0xb}, 0x1055fdec0, 0x0)
            reflect/value.go:3145 +0x214
    reflect.Value.Set({0x1055fdec0?, 0x1400012d110?, 0x94?}, {0x1055fdc80?, 0x1400012d578?, 0x140002d62a0?})
            reflect/value.go:2160 +0xc8
    github.com/tomwright/dasel.Value.Append({{0x105612ba0, 0x14000269e20, 0x94}, 0x140002aa540, 0x140002aa5b0, 0x140002d62a0})
            github.com/tomwright/dasel/value.go:239 +0x17c
    github.com/tomwright/dasel.glob..func3(0xef00000000000006?, 0x16?, {0x105a239c8?, 0x140002d6360?, 0x1400025ade0?})
            github.com/tomwright/dasel/func_append.go:26 +0x25c
    github.com/tomwright/dasel.BasicFunction.Run(...)
            github.com/tomwright/dasel/func.go:140
    github.com/tomwright/dasel.(*Step).execute(0x1400010e9b0)
            github.com/tomwright/dasel/step.go:30 +0x5c
    github.com/tomwright/dasel.(*Context).Next(0x140001f3300)
            github.com/tomwright/dasel/context.go:225 +0x1cc
    github.com/tomwright/dasel.(*Context).Run(0x105659480?)
            github.com/tomwright/dasel/context.go:193 +0x34
    github.com/tomwright/dasel.Put({0x105659480, 0x140002d6150}, {0x16ae579ba, 0x8}, {0x105659480?, 0x140002d6120?})
            github.com/tomwright/dasel/context.go:128 +0xa0
    github.com/tomwright/dasel/internal/command.runPutCommand(0x140002b3cc8, 0x105454ca7?)
            github.com/tomwright/dasel/internal/command/put.go:132 +0x4ac
    github.com/tomwright/dasel/internal/command.putRunE(0x140002ba300?, {0x140001f3200, 0x0, 0x8?})
            github.com/tomwright/dasel/internal/command/put.go:83 +0x304
    github.com/spf13/cobra.(*Command).execute(0x140002ba300, {0x140001f3180, 0x8, 0x8})
            github.com/spf13/[email protected]/command.go:916 +0x5c8
    github.com/spf13/cobra.(*Command).ExecuteC(0x140002ba000)
            github.com/spf13/[email protected]/command.go:1044 +0x35c
    github.com/spf13/cobra.(*Command).Execute(...)
            github.com/spf13/[email protected]/command.go:968
    main.main()
            github.com/tomwright/dasel/cmd/dasel/main.go:10 +0x24
    $ dasel put -f test.toml -t json -s "array2.[]" -v 123
    $ dasel put -f test.toml -t json -s "array2.[]" -v "{ \"key\": \"value\" }"
    $ dasel put -f test.toml -t json -s "array2.[]" -v 1234
    $ cat test.toml
    array2 = [123.0, { key = "value" }, 1234.0]
    
    [[array]]
      key = "value"
    

    Expected behavior The above commands should succeed.

    Desktop (please complete the following information):

    $ dasel -v
    dasel version 2.0.2
    
  • Whitespacing issues

    Whitespacing issues

    Describe the bug Adding whitespace to format the query in a readable way brakes the functionality

    To Reproduce Steps to reproduce the behavior:

    1. Create test.drawio.xml file as described bellow
    2. Issue the same query with different formatting
    3. Observe difference in behaviour
    cat test.drawio.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <mxfile host="Electron" modified="2022-12-27T16:51:00.393Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.7.4 Chrome/106.0.5249.199 Electron/21.3.3 Safari/537.36" etag="Chvfh0pmRcsiRFeLGn84" version="20.7.4" type="device">
      <diagram id="DIBkk8TONfjRhfH_ZR78" name="Page-1">
        <mxGraphModel dx="1114" dy="878" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
          <root>
            <mxCell id="0"/>
            <mxCell id="1" parent="0"/>
            <object label="" my_property="324" my_string="hello" id="vs0W597VZl1qWhmtER3h-1">
              <mxCell style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
                <mxGeometry x="100" y="200" width="120" height="60" as="geometry"/>
              </mxCell>
            </object>
          </root>
        </mxGraphModel>
      </diagram>
    </mxfile>
    

    queries

    working

    ❯ dasel -f test.drawio.xml -w json 'mxfile.diagram.mxGraphModel.root.all()
        .filter(and(equal(type(),object),equal(-my_property,324)))'
    
    {
      "-id": "vs0W597VZl1qWhmtER3h-1",
      "-label": "",
      "-my_property": "324",
      "-my_string": "hello",
      "mxCell": {
        "-parent": "1",
        "-style": "rounded=0;whiteSpace=wrap;html=1;",
        "-vertex": "1",
        "mxGeometry": {
          "-as": "geometry",
          "-height": "60",
          "-width": "120",
          "-x": "100",
          "-y": "200"
        }
      }
    }
    

    not working

    ❯ dasel -f test.drawio.xml -w json 'mxfile.diagram.mxGraphModel.root
        .all()
        .filter(and(equal(type(),object),equal(-my_property,324)))'
    
    ❯ dasel -f test.drawio.xml -w json 'mxfile.diagram.mxGraphModel.root
      .all()
      .filter(
        and(
          equal(type(),object),
          equal(-my_property,324)
        )
      )'
    
    dasel -f test.drawio.xml -w json 'mxfile.diagram.mxGraphModel.root.all()
      .filter(
        and(
          equal(type(),object),
          equal(-my_property,324)
        )
      )'
    

    Expected behavior I expect the same outpput regardless of query format

    Desktop (please complete the following information):

    • OS: MacOS (M1)
    • Version: dasel version 2.0.2
  • XML array with one member is not detected as array

    XML array with one member is not detected as array

    Describe the bug

    dasel v2.0.2. This is present in 1.x as well.

    Create array with one entry: dasel put -f NLog.config -r xml -w xml -t json 'nlog.rules.logger' -v '{"-name":"JsonWebAPI.Microsoft.Extensions.Diagnostics.HealthChecks.DefaultHealthCheckService","-maxlevel":"Error","-final":" true"}'

    And try to append: dasel put -f NLog.config -r xml -w xml -t json 'nlog.rules.logger.[]' -v '{"-name":"JsonWebAPI*","-minlevel":"Error","-writeTo":"auto-colored-console-async","-final":"true"}'

    results in error: Error: cannot use append selector on non slice/array types

    Expected behavior

    Dasel can append to an array with just one member

    Additional context

    Workaround: Create an array with two members first. dasel put -f NLog.config -r xml -w xml -t json 'nlog.rules.logger' -v '{"-name":"JsonWebAPI.Microsoft.Extensions.Diagnostics.HealthChecks.DefaultHealthCheckService","-maxlevel":"Error","-final":"true"}{"-name":"JsonWebAPI*","-minlevel":"Error","-writeTo":"file-async","-final":"true"}'

    The same append will then work. NLog.config.txt

  • `-w` does not always default to read parser

    `-w` does not always default to read parser

    Describe the bug

    dasel v2.0.2

    Run dasel put -f NLog.config -r xml -t json 'nlog.rules.logger' -v '{"-name":"JsonWebAPI.Microsoft.Extensions.Diagnostics.HealthChecks.DefaultHealthCheckService","-maxlevel":"Error","-final":"true"}'

    and get

    Error: could not get write parser from filename: unknown parser: .config

    Expected behavior Write parser is the same as read parser, instead of taken from filename.

    If "from filename" is intended instead, change the --help text.

    Additional context Workaround: Add -w xml and the command works.

  • Square brackets syntax in yaml

    Square brackets syntax in yaml

    Discussion? In yaml there is default syntax for array list:

    key1:
      - value1
      - value2
      - value3
      - value4
      - value5
    

    and square brackets syntax:

    key1: [value1,value2,value3,value4,value5]
    

    Describe the bug Dasel doesn't handle square brackets syntax for array list in yaml.

    To Reproduce

    $> cat <<EOF | tee tmp.yaml
    key1: [value1,value2,value3,value4,value5]
    key2: value6
    EOF
    
    $> dasel put -f tmp.yaml -r yaml -w yaml -v "value7" 'key2'
    $> cat tmp.yaml
    key1:
    - value1
    - value2
    - value3
    - value4
    - value5
    key2: value7
    

    Expected behavior The output should be:

    key1: [value1,value2,value3,value4,value5]
    key2: value7
    

    Desktop (please complete the following information):

    • OS: 20.04.1-Ubuntu
    • Version v2.0.2

    Additional context Square brackets syntax is used in docker-compose.yml files.

Decode / encode XML to/from map[string]interface{} (or JSON); extract values with dot-notation paths and wildcards. Replaces x2j and j2x packages.

mxj - to/from maps, XML and JSON Decode/encode XML to/from map[string]interface{} (or JSON) values, and extract/modify values from maps by key or key-

Dec 22, 2022
A Go implementation of a radix tree, that uses binary searches to speed up insert, retrieve and delete operations on dense trees

radixs A Go implementation of a radix tree, that uses binary searches to speed up insert, retrieve and delete operations on dense trees. This implemen

Feb 14, 2022
Generates data structure definitions from JSON files for any kind of programming language

Overview Archivist generates data structure definitions from JSON files for any kind of programming language. It also provides a library for golang to

Jun 28, 2022
parse and generate XML easily in go

etree The etree package is a lightweight, pure go package that expresses XML in the form of an element tree. Its design was inspired by the Python Ele

Dec 30, 2022
Converts PDF, DOC, DOCX, XML, HTML, RTF, etc to plain text

docconv A Go wrapper library to convert PDF, DOC, DOCX, XML, HTML, RTF, ODT, Pages documents and images (see optional dependencies below) to plain tex

Jan 5, 2023
A threadsafe single-value cache for Go with a simple but flexible API

SVCache SVCache is a threadsafe, single-value cache with a simple but flexible API. When there is no fresh value in the cache, an attempt to retrieve

Jan 23, 2022
Graphoscope: a solution to access multiple independent data sources from a common UI and show data relations as a graph
Graphoscope: a solution to access multiple independent data sources from a common UI and show data relations as a graph

Graphoscope A solution to access multiple independent data sources from a common UI and show data relations as a graph: Contains a list of by default

May 26, 2022
A tree like tool help you to explore data structures in your redis server
 A tree like tool help you to explore data structures in your redis server

Redis-view is a tree like tool help you explore data structures in your redis server

Mar 17, 2022
estruct traverses javascript projects and maps all the dependencies and relationships to a JSON. the output can be used to build network visualizations of the project and document the architecture.
estruct traverses javascript projects and maps all the dependencies and relationships to a JSON. the output can be used to build network visualizations of the project and document the architecture.

EStruct traverses javascript projects and maps all the dependencies and relationships to a JSON. The output can be used to build network visualizations of the project and document the architecture.

Jan 27, 2022
Nullable Go types that can be marshalled/unmarshalled to/from JSON.

Nullable Go types Description This package provides nullable Go types for bool, float64, int64, int32, string and time.Time replacing sql.NullString,

Dec 12, 2022
Convert json string to Golang struct

json-to-go-cli Convert json string to Golang struct How to install git clone https://github.com/tiancheng92/json-to-go-cli.git cd json-to-go-cli go bu

May 10, 2022
Custom generic HTTP handler providing automatic JSON decoding/encoding of HTTP request/response to your concrete types

gap Custom generic HTTP handler providing automatic JSON decoding/encoding of HTTP request/response to your concrete types. gap.Wrap allows to use the

Aug 28, 2022
Golang library for reading and writing Microsoft Excel™ (XLSX) files.
Golang library for reading and writing Microsoft Excel™ (XLSX) files.

Excelize Introduction Excelize is a library written in pure Go providing a set of functions that allow you to write to and read from XLSX / XLSM / XLT

Jan 9, 2023
Go (golang) library for reading and writing XLSX files.

XLSX Introduction xlsx is a library to simplify reading and writing the XML format used by recent version of Microsoft Excel in Go programs. Tutorial

Jan 5, 2023
Package for indexing zip files and storing a compressed index

zipindex zipindex provides a size optimized representation of a zip file to allow decompressing the file without reading the zip file index. It will o

Nov 30, 2022
grep utility that searches through zip,jar,ear,tgz,bz2 in any form of nesting; it can also decompile class files

rzgrep - grep for stuff in archives that are embedded within archives This is a small utility, it greps through the contents of an archive file, it al

May 10, 2022
Data structure and algorithm library for go, designed to provide functions similar to C++ STL

GoSTL English | 简体中文 Introduction GoSTL is a data structure and algorithm library for go, designed to provide functions similar to C++ STL, but more p

Dec 26, 2022
Gota: DataFrames and data wrangling in Go (Golang)

Gota: DataFrames, Series and Data Wrangling for Go This is an implementation of DataFrames, Series and data wrangling methods for the Go programming l

Jan 6, 2023