如何在 Go 中解析 JSON 数组
How to parse JSON array in Go
如何使用 json 包在 Go 中解析字符串(数组)?
type JsonType struct{
Array []string
}
func main(){
dataJson = `["1","2","3"]`
arr := JsonType{}
unmarshaled := json.Unmarshal([]byte(dataJson), &arr.Array)
log.Printf("Unmarshaled: %v", unmarshaled)
}
注意:这个回答是在编辑问题之前写的。在 original question 中 &arr
被传递给 json.Unmarshal()
:
unmarshaled := json.Unmarshal([]byte(dataJson), &arr)
您将 arr
的地址传递给 json.Unmarshal()
以解组一个 JSON 数组,但是 arr
不是数组(或切片),它是一个结构值。
数组可以解组为 Go 数组或切片。所以通过 arr.Array
:
dataJson := `["1","2","3"]`
arr := JsonType{}
err := json.Unmarshal([]byte(dataJson), &arr.Array)
log.Printf("Unmarshaled: %v, error: %v", arr.Array, err)
输出(在 Go Playground 上尝试):
2009/11/10 23:00:00 Unmarshaled: [1 2 3], error: <nil>
当然你甚至不需要 JsonType
包装器,只需使用一个简单的 []string
切片:
dataJson := `["1","2","3"]`
var s []string
err := json.Unmarshal([]byte(dataJson), &s)
return value of Unmarshal
is an error,这就是你正在打印的内容:
// Return value type of Unmarshal is error.
err := json.Unmarshal([]byte(dataJson), &arr)
您也可以去掉 JsonType
,只使用切片:
package main
import (
"encoding/json"
"log"
)
func main() {
dataJson := `["1","2","3"]`
var arr []string
_ = json.Unmarshal([]byte(dataJson), &arr)
log.Printf("Unmarshaled: %v", arr)
}
// prints out:
// 2009/11/10 23:00:00 Unmarshaled: [1 2 3]
播放代码:https://play.golang.org/p/GNWlylavam
背景:传入一个指针允许Unmarshal
减少(或完全摆脱)内存分配。此外,在处理上下文中,调用者可以重复使用相同的值 - 也可以节省分配。
如何使用 json 包在 Go 中解析字符串(数组)?
type JsonType struct{
Array []string
}
func main(){
dataJson = `["1","2","3"]`
arr := JsonType{}
unmarshaled := json.Unmarshal([]byte(dataJson), &arr.Array)
log.Printf("Unmarshaled: %v", unmarshaled)
}
注意:这个回答是在编辑问题之前写的。在 original question 中 &arr
被传递给 json.Unmarshal()
:
unmarshaled := json.Unmarshal([]byte(dataJson), &arr)
您将 arr
的地址传递给 json.Unmarshal()
以解组一个 JSON 数组,但是 arr
不是数组(或切片),它是一个结构值。
数组可以解组为 Go 数组或切片。所以通过 arr.Array
:
dataJson := `["1","2","3"]`
arr := JsonType{}
err := json.Unmarshal([]byte(dataJson), &arr.Array)
log.Printf("Unmarshaled: %v, error: %v", arr.Array, err)
输出(在 Go Playground 上尝试):
2009/11/10 23:00:00 Unmarshaled: [1 2 3], error: <nil>
当然你甚至不需要 JsonType
包装器,只需使用一个简单的 []string
切片:
dataJson := `["1","2","3"]`
var s []string
err := json.Unmarshal([]byte(dataJson), &s)
return value of Unmarshal
is an error,这就是你正在打印的内容:
// Return value type of Unmarshal is error.
err := json.Unmarshal([]byte(dataJson), &arr)
您也可以去掉 JsonType
,只使用切片:
package main
import (
"encoding/json"
"log"
)
func main() {
dataJson := `["1","2","3"]`
var arr []string
_ = json.Unmarshal([]byte(dataJson), &arr)
log.Printf("Unmarshaled: %v", arr)
}
// prints out:
// 2009/11/10 23:00:00 Unmarshaled: [1 2 3]
播放代码:https://play.golang.org/p/GNWlylavam
背景:传入一个指针允许Unmarshal
减少(或完全摆脱)内存分配。此外,在处理上下文中,调用者可以重复使用相同的值 - 也可以节省分配。