stretchr/objx
GitHub: stretchr/objx
Objx 是一个 Go 语言数据处理库,通过封装 map 类型并提供链式访问与自动类型转换,简化了 JSON、map 和 slice 等动态数据的读取与操作。
Stars: 864 | Forks: 79
# Objx
[](https://travis-ci.org/stretchr/objx)
[](https://goreportcard.com/report/github.com/stretchr/objx)
[](https://sourcegraph.com/github.com/stretchr/objx)
[](https://pkg.go.dev/github.com/stretchr/objx)
Objx - 用于处理 map、slice、JSON 和其他数据的 Go 包。
入门指南:
- 用[一行代码](#installation)安装 Objx,或者[用另一行代码](#staying-up-to-date)更新它
- 查看 API 文档 http://pkg.go.dev/github.com/stretchr/objx
## 概述
Objx 提供了 `objx.Map` 类型,它是一个 `map[string]interface{}`,并暴露了一个强大的 `Get` 方法(以及其他方法),让你能够轻松快速地访问 map 中的数据,而无需过多担心类型断言、数据缺失、默认值等问题。
### 模式
Objx 使用一种可预测的模式,使得从 `map[string]interface{}` 中访问数据变得非常简单。调用其中一个 `objx.` 函数来创建你的 `objx.Map` 即可开始:
```
m, err := objx.FromJSON(json)
```
注意:任何带有 `Must` 前缀的方法或函数在出现问题时都会触发 panic,其余的方法则是乐观处理,尝试在不触发 panic 的情况下解决问题。
使用 `Get` 访问你感兴趣的值。你还可以使用点和数组
表示法:
```
m.Get("places[0].latlng")
```
一旦找到了你感兴趣的 `Value`,就可以使用 `Is*` 方法来确定它的类型。
```
if m.Get("code").IsStr() { // Your code... }
```
或者你可以直接假定类型,并使用其中一个强类型方法来提取实际值:
```
m.Get("code").Int()
```
如果那里没有值(或者类型不正确),将会返回一个默认值,或者你也可以显式指定默认值。
```
Get("code").Int(-1)
```
如果你要处理的值是一个数据 slice,Objx 提供了许多有用的方法来遍历、操作和选择这些数据。你可以通过探索下面的索引了解更多信息。
### 读取数据
一个关于如何使用 Objx 的简单示例:
```
// Use MustFromJSON to make an objx.Map from some JSON
m := objx.MustFromJSON(`{"name": "Mat", "age": 30}`)
// Get the details
name := m.Get("name").Str()
age := m.Get("age").Int()
// Get their nickname (or use their name if they don't have one)
nickname := m.Get("nickname").Str(name)
```
### 遍历
由于 `objx.Map` 是一个 `map[string]interface{}`,你可以直接把它当作 map 来处理。例如,要 `range`(遍历)数据,按照你期望的方式操作即可:
```
m := objx.MustFromJSON(json)
for key, value := range m {
// Your code...
}
```
## 安装说明
要安装 Objx,请使用 go get:
```
go get github.com/stretchr/objx
```
### 保持更新
要将 Objx 更新到最新版本,请运行:
```
go get -u github.com/stretchr/objx
```
### 支持的 Go 版本
我们目前支持最近的三个 Go 主要版本。
## 贡献
欢迎提交 issue、fork 本仓库并发送 pull request!
标签:EVTX分析, Go, Homebrew安装, JSON, Ruby工具, 开发工具库, 数据结构, 日志审计