如何在golang中获取所有具有jsonpaths的对象

Fer*_*lez 3 json go jsonpath

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

{
"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"
    }
]}
Run Code Online (Sandbox Code Playgroud)

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

$.phoneNumbers[?(@.type == "iPhone")]
Run Code Online (Sandbox Code Playgroud)

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

$.[*].phoneNumbers[*].type
Run Code Online (Sandbox Code Playgroud)

我必须寻找的价值是通过以下方式实现的:

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

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

[{
    "type": "iPhone",
    "number": "0123-4567-8888"
},
{
    "type": "iPhone",
    "number": "0123-4567-8888"
}]
Run Code Online (Sandbox Code Playgroud)

我不能使用 [?(@.)] 格式,它必须用 if 来制作。任何想法?谢谢

ben*_*raj 5

我使用 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]

Run Code Online (Sandbox Code Playgroud)

去游乐场