【发布时间】:2014-08-15 12:45:44
【问题描述】:
例如:
{["NewYork",123]}
对于json数组被解码为go数组,而go数组需要显式定义一个类型, 不知道怎么处理。
【问题讨论】:
例如:
{["NewYork",123]}
对于json数组被解码为go数组,而go数组需要显式定义一个类型, 不知道怎么处理。
【问题讨论】:
首先,json 是无效的,对象必须有键,所以它应该是 {"key":["NewYork",123]} 或只是 ["NewYork",123]。
当您处理多种随机类型时,您只需使用interface{}。
const j = `{"NYC": ["NewYork",123]}`
type UntypedJson map[string][]interface{}
func main() {
ut := UntypedJson{}
fmt.Println(json.Unmarshal([]byte(j), &ut))
fmt.Printf("%#v", ut)
}
【讨论】:
json 包使用 map[string]interface{} 和 []interface{} 值来存储任意 JSON 对象和数组... http://blog.golang.org/json-and-go
对象中的每个值都必须有键。所以假设这是你的 json :
{"key":["NewYork",123]}
那么你的代码应该是这样的:
package main
import (
"encoding/json"
"fmt"
)
type Message map[string]interface{}
func main() {
msg := Message{}
s := `{"key":["Newyork",123]}`
err := json.Unmarshal([]byte(s), &msg)
fmt.Println(msg, err)
}
【讨论】:
map[string][]interface{} 更好,因为他总是期待一个数组。
map[string]interface{} 如果您希望该值是 null 或数组之外的其他值,则非常好。