buger / jsonparser

One of the fastest alternative JSON parser for Go that does not require schema

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

EachKey cannot extract from array of strings

leodido opened this issue · comments

The EachKey API does not work coherently to the Get one w.r.t array of strings.

Meaning that it does not work on paths like "request>headers>User-Agent>[0]", while Get does.

Here's a minimal reproducer:

package main

import (
	"fmt"

	"github.com/buger/jsonparser"
)

func main() {
	data := []byte(`{"request":{"headers":{"User-Agent":["abc"]}}}`)

	paths := [][]string{
		[]string{"request", "headers", "User-Agent", "[0]"},
	}

	jsonparser.EachKey(data, func(idx int, val []byte, typ jsonparser.ValueType, err error) {
		fmt.Printf("NO: val: %s / typ: %s / err: %s\n", val, typ, err)
	}, paths...)

	v, t, _, e := jsonparser.Get(data, paths[0]...)
	fmt.Printf("OK: val: %s / typ: %s / err: %s\n", v, t, e)
}

As you can see in the output EachKey fails while Get doesn't:

NO: val:  / typ: unknown / err: Unknown value type
OK: val: abc / typ: string / err: %!s(<nil>)

this issue may be a duplicate of #180