jmespath/go-jmespath
GitHub: jmespath/go-jmespath
JMESPath 查询语言的 Go 语言实现,用于在 JSON 文档中执行复杂的数据查询、过滤和转换。
Stars: 622 | Forks: 101
# go-jmespath - 一个 Go 语言实现的 JMESPath
[](https://travis-ci.org/jmespath/go-jmespath)
go-jmespath 是 JMESPath 的一个 GO 实现,
JMESPath 是一种用于 JSON 的查询语言。它会接收一个 JSON
文档,并通过 JMESPath 表达式将其转换为另一个
JSON 文档。
使用 go-jmespath 非常简单。你只需要使用一个
函数,即 `jmespath.search`:
```
> import "github.com/jmespath/go-jmespath"
>
> var jsondata = []byte(`{"foo": {"bar": {"baz": [0, 1, 2, 3, 4]}}}`) // your data
> var data interface{}
> err := json.Unmarshal(jsondata, &data)
> result, err := jmespath.Search("foo.bar.baz[2]", data)
result = 2
```
在上面的示例中,我们为 ``search`` 函数提供了
输入数据 `{"foo": {"bar": {"baz": [0, 1, 2, 3, 4]}}}` 以及 JMESPath
表达式 `foo.bar.baz[2]`,随后 `search` 函数对该
表达式进行求值,并针对输入数据生成了结果 ``2``。
JMESPath 语言能做的远不止从列表中选择某个元素。
以下是更多示例:
```
> var jsondata = []byte(`{"foo": {"bar": {"baz": [0, 1, 2, 3, 4]}}}`) // your data
> var data interface{}
> err := json.Unmarshal(jsondata, &data)
> result, err := jmespath.search("foo.bar", data)
result = { "baz": [ 0, 1, 2, 3, 4 ] }
> var jsondata = []byte(`{"foo": [{"first": "a", "last": "b"},
{"first": "c", "last": "d"}]}`) // your data
> var data interface{}
> err := json.Unmarshal(jsondata, &data)
> result, err := jmespath.search({"foo[*].first", data)
result [ 'a', 'c' ]
> var jsondata = []byte(`{"foo": [{"age": 20}, {"age": 25},
{"age": 30}, {"age": 35},
{"age": 40}]}`) // your data
> var data interface{}
> err := json.Unmarshal(jsondata, &data)
> result, err := jmespath.search("foo[?age > `30`]")
result = [ { age: 35 }, { age: 40 } ]
```
你也可以预编译你的查询。如果你打算使用它进行多次搜索,这将会很有用:
```
> var jsondata = []byte(`{"foo": "bar"}`)
> var data interface{}
> err := json.Unmarshal(jsondata, &data)
> precompiled, err := Compile("foo")
> if err != nil{
> // ... handle the error
> }
> result, err := precompiled.Search(data)
result = "bar"
```
## 更多资源
上面的示例仅仅展示了 JMESPath 表达式
所具备功能的冰山一角。如果你想
深入了解这门语言,*最佳*的去处是
[JMESPath 教程](http://jmespath.org/tutorial.html)。
JMESPath 最大的优点之一就是它由许多不同的编程语言实现,包括
python、ruby、php、lua 等。要查看完整的库列表,
请访问 [JMESPath 库页面](http://jmespath.org/libraries.html)。
最后,完整的 JMESPath 规范可以在
[JMESPath 网站](http://jmespath.org/specification.html)上找到。
标签:EVTX分析, Go, Homebrew安装, JMESPath, JSON查询, Ruby工具, 开发库, 数据解析, 日志审计