如何在 Go 中构建嵌套的动态 JSON
how to build a nested, dynamic JSON in Go
我正在用 Go 编写一个简单的 API,它从数据库中读取并输出 GeoJSON。
我有这个用于简单的点。但是我的一些数据是线(linestring)。我想要一个通用的 GeoJSON 结构定义。然而,正如 GeoJSON 中指定的那样,“Features”元素有一个“Coordinates”子元素,它包含一个 [2]float32 点坐标,或者一个 array线和多边形的点数。
有没有办法用这种方式在 Go 中定义一个结构体?我来自 PHP,如果使用弱类型数组,那将是微不足道的。
如果我不能用结构体来做 - 除了拼凑一个字符串还有什么是 Go 中的正确方法?
注意:类似的问题都是关于解组动态的JSON。我需要从数据库内容中构建一个。
您可以创建一个 map[string]any
,为 Coordinates
设置它的值,然后整理它。
例如:
package main
import (
"encoding/json"
"fmt"
)
type Point struct {
X, Y int
}
func main() {
m := map[string]any{}
var singleCoordinate bool
if singleCoordinate {
m["Coordinates"] = []float32{1, 2}
} else {
m["Coordinates"] = []Point{{X: 1, Y: 2}, {X: 2, Y: 2}}
}
data, err := json.Marshal(m)
fmt.Println(string(data), err)
}
我正在用 Go 编写一个简单的 API,它从数据库中读取并输出 GeoJSON。
我有这个用于简单的点。但是我的一些数据是线(linestring)。我想要一个通用的 GeoJSON 结构定义。然而,正如 GeoJSON 中指定的那样,“Features”元素有一个“Coordinates”子元素,它包含一个 [2]float32 点坐标,或者一个 array线和多边形的点数。
有没有办法用这种方式在 Go 中定义一个结构体?我来自 PHP,如果使用弱类型数组,那将是微不足道的。
如果我不能用结构体来做 - 除了拼凑一个字符串还有什么是 Go 中的正确方法?
注意:类似的问题都是关于解组动态的JSON。我需要从数据库内容中构建一个。
您可以创建一个 map[string]any
,为 Coordinates
设置它的值,然后整理它。
例如:
package main
import (
"encoding/json"
"fmt"
)
type Point struct {
X, Y int
}
func main() {
m := map[string]any{}
var singleCoordinate bool
if singleCoordinate {
m["Coordinates"] = []float32{1, 2}
} else {
m["Coordinates"] = []Point{{X: 1, Y: 2}, {X: 2, Y: 2}}
}
data, err := json.Marshal(m)
fmt.Println(string(data), err)
}