2013-03-13 5 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

+2

Посмотрите на строку 45, ваш json неверен, https://github.com/mictadlo/mgo/blob/master/chemeo/chemeo.go#L45 также вы можете просто обернуть свой json обратными окнами без всех знаков '+' , – dskinner

+1

ссылка на ваш код, вероятно, вызывает ваш вопрос, чтобы получить downvoted. Вы должны вставить небольшой пример своей проблемы в ответ. –

ответ

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