/note/tech

jmespath/go-jmespath: Golang implementation of JMESPath.

MEMO:

package main

import (
    "encoding/json"
    "fmt"

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

func main() {
    // 1. JSONデータを Goの interface{} に変換する
    jsonData := []byte(`
    {
        "users": [
            {"name": "Alice", "age": 30, "city": "Tokyo"},
            {"name": "Bob", "age": 25, "city": "Osaka"}
        ],
        "status": "ok"
    }
    `)

    var data interface{}
    if err := json.Unmarshal(jsonData, &data); err != nil {
        panic(err)
    }

    // 2. JMESPathクエリを実行する
    // クエリ: "users"配列から、各要素の "name" の値だけを抽出して配列にする
    query := "users[*].name"

    result, err := jmespath.Search(query, data)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    // 3. 結果を表示する
    // resultは interface{} 型で返される
    fmt.Printf("Query: %s\n", query)
    fmt.Printf("Result Type: %T\n", result)
    fmt.Printf("Result Value: %v\n", result) 
    // Output: Result Value: [Alice Bob]
}