如何在golang中使用json路径获取所有对象



我在golang中使用jsonpath,但我无法获得以下json中包含iPhone类型的所有对象:

{
"firstName": "John",
"lastName": "doe",
"age": 26,
"address": {
"streetAddress": "naist street",
"city": "Nara",
"postalCode": "630-0192"
},
"phoneNumbers": [
{
"type": "iPhone",
"number": "0123-4567-8888"
},
{
"type": "home",
"number": "0123-4567-8910"
},
{
"type": "iPhone",
"number": "0123-4567-8910"
}
]}

我正在使用golang,我知道下面的jsonpath可以工作:

$.phoneNumbers[?(@.type == "iPhone")]

我遇到的问题是,它是一个服务,我输入了一个json路径,如下所示:

$.[*].phoneNumbers[*].type

我要查找的值,我用下面的方法来做:

values, err := jsonpath.Get(jsonPath, data)
for _, value := range values {
if err != nil {
continue
}
if value.(string) == "iPhone" {

}
}

此时我无法得到如下输出:

[{
"type": "iPhone",
"number": "0123-4567-8888"
},
{
"type": "iPhone",
"number": "0123-4567-8888"
}]

我不能使用[?(@.)]格式,但必须使用if。任何想法?由于

我使用Peter Ohler的ojg包编写了一个示例。下面是实现的样子:

package main
import (
"fmt"
"github.com/ohler55/ojg/jp"
"github.com/ohler55/ojg/oj"
)
var jsonString string = `{
// Your JSON string
}`
func main() {
obj, err := oj.ParseString(jsonString)
if err != nil {
panic(err)
}
x, err := jp.ParseString(`$.phoneNumbers[?(@.type == "iPhone")]`)
if err != nil {
panic(err)
}
ys := x.Get(obj)
for k, v := range ys {
fmt.Println(k, "=>", v)
}
}
// Output:
// 0 => map[number:0123-4567-8888 type:iPhone]
// 1 => map[number:0123-4567-8910 type:iPhone]

去操场

最新更新