猿问

用 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

我做错了什么?


千巷猫影
浏览 187回答 1
1回答

倚天杖

您的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        }    ]}`
随时随地看视频慕课网APP

相关分类

Go
我要回答