我尝试运行以下代码package mainimport ( "encoding/json" "fmt" /*"labix.org/v2/mgo" "labix.org/v2/mgo/bson"*/)func insertEntry(j *map[string]interface{}, entry string) { err := json.Unmarshal([]byte(entry), j) if err != nil { panic(err) }}func main() { c1 := "{" + `"mw" : 42.0922,` + `"ΔfH°gas" : {` + ` "value" : 372.38,` + ` "units" : "kJ/mol"` + `},` + `"S°gas" : {` + ` "value" : 216.81,` + ` "units" : "J/mol×K"` + `},` + `"index" : [` + ` {"name" : "mw", "value" : 42.0922},` + ` {"name" : "ΔfH°gas", "value" : 372.38},` + ` {"name" : "S°gas", "value" : 216.81}` + `]` + `}` c2 := "{" + `"name" : "silicon",` + `"mw" : 32.1173,` + `}` + `"index" : [` + ` {"name" : "mw", "value" : 32.1173}` + `]` + `}` var m map[string]interface{} insertEntry(&m, c1) insertEntry(&m, c2) chemical := m["ΔfH°gas"].(map[string]interface{}) fmt.Println("value: %s\n", chemical["value"].(string)) fmt.Println("units: %s\n", chemical["units"].(string))但我收到以下错误消息: $ go run chemeo.go panic: invalid character '}' looking for beginning of object key string goroutine 1 [running]: main.insertEntry(0xf840045100, 0x4badc4, 0x7f5e00000056, 0x20043115c) /media/mictadlo/projects/mgo/chemeo/chemeo.go:19 +0xd8 main.main() /media/mictadlo/projects/mgo/chemeo/chemeo.go:54 +0xa3 goroutine 2 [syscall]: created by runtime.main /usr/local/go/src/pkg/runtime/proc.c:221 exit status 2我做错了什么?
1 回答
倚天杖
TA贡献1828条经验 获得超3个赞
您的c2变量持有无效的 JSON:
c2 := "{" +
`"name" : "silicon",` +
`"mw" : 32.1173,` +
`}` +
`"index" : [` +
` {"name" : "mw", "value" : 32.1173}` +
`]` +
`}`
清理干净,它看起来像这样:
c2 := `{
"name" : "silicon",
"mw" : 32.1173,
}
"index" : [
{"name" : "mw", "value" : 32.1173}
]
}`
你可以看到}中间有一个额外的。
它应该是这样的:
c2 := `{
"name": "silicon",
"mw": 32.1173,
"index": [
{
"name": "mw",
"value": 32.1173
}
]
}`
- 1 回答
- 0 关注
- 186 浏览
添加回答
举报
0/150
提交
取消