MEMO:
- JSONを宣言的にクエリ(検索・抽出・整形)するライブラリ
- 簡単なサンプル
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]
}
- 簡単なフィルタならsamber/loを使った方がシンプルだろうか
(2025/11/19)