当我解组json数组时出现了问题 我该如何纠正?代码是:http://play.golang.org/p/AtU9q8Hlye
package main
import (
"encoding/json"
"fmt"
)
type Server struct {
ServerName string
ServerIP string
}
type Serverslice struct {
Name string
Servers []Server
}
func main() {
var s []Serverslice
str := `{"name":"dxh","servers":[{"serverName":"VPN0","serverIP":"127.0.0.1"},{"serverName":"Beijing_VPN","serverIP":"127.0.0.2"}],
"name":"dxh1,"servers":[{"serverName":"VPN1","serverIP":"127.0.0.1"},{"serverName":"Beijing_VPN","serverIP":"127.0.0.2"}]}`
json.Unmarshal([]byte(str), &s) //the wrong line.....................
fmt.Println(len(s))
}
答案 0 :(得分:4)
首先,您要忽略json.Unmarshal
的错误返回值。你可能想要这样的东西:
if err := json.Unmarshal([]byte(str), &s); err != nil {
log.Fatalln(err)
}
通过此更改,我们可以看到您的JSON数据无效:invalid character 's' after object key:value pair
。第二行的"dxh1
末尾有一个缺失的引号。
修复该错误并重新运行该程序会导致其他错误:json: cannot unmarshal object into Go value of type []main.Serverslice
。这里有两个可能的问题:
您打算解码为对象。在这种情况下,只需将s
声明为Serverslice
即可。以下是进行此更改的程序版本:http://play.golang.org/p/zgyr_vnn-_
您的JSON应该是一个数组(可能,因为它似乎有重复的键)。这是一个更新版本,更改了JSON以提供数组:http://play.golang.org/p/Wl6kUaivEm