jmespath / jmespath/go-jmespath

Probable bug: mysterious nulls from wildcard expression

Open
#84 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
621
Forks
101
PR merge metrics
No merged PRs in 30d

Description

I ran this program:

```go
package main

import (
"encoding/json"
"fmt"

"github.com/jmespath/go-jmespath"
)

func main() {
jsonBytes := []byte(`
{
"author": "Mark Twain",
"title": "The Adventures of Tom Sawyer",
"words": 80000,
"year": 1876
}
`)
var jsonData any
err := json.Unmarshal(jsonBytes, &jsonData)
if err != nil {
panic(err)
}

queryResult, err := jmespath.Search("*.to_string(@)", jsonData)
if err != nil {
panic(err)
}

fmt.Printf("%#v\n", queryResult)
}
```

Its output was:

```
[]interface {}{"null", "null", "null", "null", "Mark Twain", "The Adventures of Tom Sawyer", "80000", "1876"}
```

I don't understand where the `"null"` strings are coming from. This behaviour looks like a bug to me.

Here are `go.mod` and `go.sum`:

```
module bug-report

go 1.20

require github.com/jmespath/go-jmespath v0.4.0
```

```
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
```

## Comparison with JavaScript

I ran these commands:

```sh
npm install jmespath@0.16.0
./node_modules/jmespath/jp.js '*.to_string(@)' < book.json
```

Here is `book.json`:

```json
{
"author": "Mark Twain",
"title": "The Adventures of Tom Sawyer",
"words": 80000,
"year": 1876
}
```

The output of the second command was:

```json
["Mark Twain","The Adventures of Tom Sawyer","80000","1876"]
```

This is the output I expect to see from that JSON and that JMESPath query. It's obviously different from the output of the Go program.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.