3 回答

TA貢獻1824條經(jīng)驗 獲得超8個贊
只是讓您知道可以不Unmarshal使用而可以執(zhí)行此操作json.decode。這是圍棋場
package main
import (
"encoding/json"
"fmt"
"strings"
)
type Product struct {
Name string `json:"name"`
Price float64 `json:"price,string"`
}
func main() {
s := `{"name":"Galaxy Nexus","price":"3460.00"}`
var pro Product
err := json.NewDecoder(strings.NewReader(s)).Decode(&pro)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(pro)
}

TA貢獻1786條經(jīng)驗 獲得超13個贊
避免將字符串轉(zhuǎn)換為[]字節(jié):b := []byte(s)。它分配一個新的內(nèi)存空間,并將整個內(nèi)容復制到其中。
strings.NewReader界面比較好。以下是godoc的代碼:
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"strings"
)
func main() {
const jsonStream = `
{"Name": "Ed", "Text": "Knock knock."}
{"Name": "Sam", "Text": "Who's there?"}
{"Name": "Ed", "Text": "Go fmt."}
{"Name": "Sam", "Text": "Go fmt who?"}
{"Name": "Ed", "Text": "Go fmt yourself!"}
`
type Message struct {
Name, Text string
}
dec := json.NewDecoder(strings.NewReader(jsonStream))
for {
var m Message
if err := dec.Decode(&m); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
fmt.Printf("%s: %s\n", m.Name, m.Text)
}
}
- 3 回答
- 0 關注
- 310 瀏覽
添加回答
舉報