现有的模块只能处理固定格式的数组,也就是可以用一个结构 sruct 描述的数据结构,这些数据是由这种结构的数据排列而成。
事实上,很多 JSON 数据结构并不是固定的,例如语法树。
["Spp",["Rules",[["Assert","^"],["Rept",["+",["Branch",[["Rtoken","_"],["Ntoken","Spec"]]]]],["Assert","$"]]]]
大家有没有遇到过这种情况?如果遇到了,是如何解决的呢?
更多评论
这个模块也是用 go 自带的 json 模块扩展出来的,也是要提前知道结构或者是某个元素的值,才能获取 JSON 中的元素值。
```go
package main
import "github.com/tidwall/gjson"
const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`
func main() {
value := gjson.Get(json, "name.last")
println(value.String())
}
```
JSON 本是一种可以容纳不同数据类型的数据结构,解析成 go 语言中的对应的数据结构后,构建和遍历都应当和内容无关,所以这个模块适用范围有限。
我心目中的模块应当是:
```go
import "ejson"
func main() {
values := ejson.Values(json)
if ejson.is_array(values) {
for _, v := range ejson.values(json) {
println(ejson.String(v))
}
}
println(ejson.String(values))
}
```
#2