2013-03-13 134 views
3

我试图运行下面的代码恐慌与JSON在去

package main 

import (
    "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 

我做了什么错?

+0

很难说没有你的源数据。 – Daniel 2013-03-13 23:40:25

+2

看第45行,你的json不正确,https://github.com/mictadlo/mgo/blob/master/chemeo/chemeo.go#L45你也可以用反引号包装你的json而不用所有的'+'符号。 – dskinner 2013-03-13 23:44:08

+1

链接到您的代码可能导致您的问题downvoted。你应该在问题的答案中粘贴一个小问题的例子。 – 2013-03-14 02:16:16

回答

11

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 
     } 
    ] 
}` 
+0

谢谢你正在工作 – user977828 2013-03-14 10:25:14