Extracts a value from a JSON string using a dot-separated path.
| Field | Type | Description |
|---|---|---|
JSON | *string | JSON-encoded string to navigate |
Path | *string | Dot-separated path (numeric segments index arrays) |
| Field | Type | Description |
|---|---|---|
Value | string | JSON-encoded leaf value, or empty string if path not found |
Dot-path navigation. Use numeric segments to index arrays: meals.0.name reads meals[0].name. The returned value is JSON-encoded — a string field includes its quotes.
Extracts a user's name from a nested JSON API response payload using a dot path.
package main
import (
"context"
"encoding/json"
"log"
"os"
"time"
"github.com/akennis/sparsi-go/library"
_ "github.com/akennis/dagor/operator/builtin"
"github.com/panjf2000/ants/v2"
"github.com/akennis/dagor"
"github.com/akennis/dagor/graph"
)
func main() {
payload := `{"user":{"name":"Alice","tier":"gold"},"order":{"id":9912,"items":["widget","gadget"]}}`
path := "user.name"
library.RegisterConst("json_payload", payload)
library.RegisterConst("json_path", path)
g, err := graph.NewBuilder("json_extract_demo").
Vertex("src_json").Op("json_payload").Output("Result", "json_wire").
Vertex("src_path").Op("json_path").Output("Result", "path_wire").
Vertex("extract").Op("JSONExtractOp").
Input("JSON", "json_wire").
Input("Path", "path_wire").
Output("Value", "extracted").
Build()
if err != nil {
log.Fatalf("build: %v", err)
}
pool, err := ants.NewPool(4)
if err != nil {
log.Fatalf("pool: %v", err)
}
defer pool.Release()
eng, err := dagor.NewEngine(g, pool)
if err != nil {
log.Fatalf("engine: %v", err)
}
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
defer cancel()
if err := eng.Run(ctx); err != nil {
log.Fatalf("run: %v", err)
}
out := map[string]any{"path": path}
if raw, ok := eng.GetOutput("extracted"); ok {
out["value"] = *raw.(*string)
}
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
enc.Encode(out)
}