3 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
你有兩個(gè)大問(wèn)題:
您的標(biāo)簽完全錯(cuò)誤。例如,您的輸入包含"C":2.123,但您的結(jié)構(gòu)標(biāo)簽意味著 Unmarshaler 正在尋找"coefficient":2.123,它永遠(yuǎn)找不到。要更正此問(wèn)題,請(qǐng)?jiān)O(shè)置標(biāo)簽以匹配您的輸入:
type ParsedObjectType struct{
Value struct{
E []struct {
B bool
C float32 `json:"C"`
CE float32
G int `json:"G"`
P float32 `json:"P"`
T int `json:"T"`
}
}
}
請(qǐng)注意,現(xiàn)在您的結(jié)構(gòu)字段與您的 JSON 鍵完全匹配,因此如果您愿意,您可以簡(jiǎn)單地完全消除您的 JSON 標(biāo)簽以簡(jiǎn)單起見(jiàn):
type ParsedObjectType struct{
Value struct{
E []struct {
B bool
C float32
CE float32
G int
P float32
T int
}
}
}
您的數(shù)據(jù)結(jié)構(gòu)似乎與您的輸入不匹配。您的輸入似乎是單個(gè)對(duì)象,但您的輸入需要一個(gè)對(duì)象中的一個(gè)對(duì)象。要更正此問(wèn)題(假設(shè)您在問(wèn)題中提供的輸入是完整的),請(qǐng)刪除數(shù)據(jù)結(jié)構(gòu)中的額外層:
type ParsedObjectType struct{
B bool
C float32
CE float32
G int
P float32
T int
}

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
據(jù)我所知,json
你有緊湊的名字,但它不應(yīng)該強(qiáng)迫你在結(jié)構(gòu)中創(chuàng)建神秘的名字。
在代碼中,您應(yīng)該使用有意義的名稱,但在序列化格式中您可以使用同義詞。
改編自您的示例:游樂(lè)場(chǎng):https://play.golang.org/p/gbWhV3FfHMr
package main
import (
"encoding/json"
"log"
)
type ParsedObjectType struct {
Value struct {
Items []struct {
Coefficient float32 `json:"C"`
Group int `json:"G"`
Period float32 `json:"P"`
TypeValue int `json:"T"`
} `json:"E"`
}
}
func main() {
str := `{"Value": {
"E": [
{
"B": false,
"C": 2.123,
"CE": 0,
"G": 1,
"P": 1000,
"T": 0
}
]
}
}`
out := &ParsedObjectType{}
if err := json.Unmarshal([]byte(str), out); err != nil {
log.Printf("failed unmarshal %s", err)
}
log.Printf("Constructed: %#v", out)
}

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果你想解析{"B":false,"C":2.123,"CE":0,"G":1,"P":1000,"T":0}為
{
"B": false,
"coefficient": 0,
"CE": 0,
"group": 0,
"period": 0,
"type": 0
}
我認(rèn)為你的結(jié)構(gòu)應(yīng)該聲明為
struct {
B bool
coefficient float32 `json:"C"`
CE float32
group int `json:"G"`
period float32 `json:"P"`
type int `json:"T"`
}
如果你想解析{"B":false,"C":2.123,"CE":0,"G":1,"P":1000,"T":0}為
{
"B": false,
"coefficient": 0,
"CE": 0,
"group": 0,
"period": 0,
"type": 0
}
我認(rèn)為你的結(jié)構(gòu)應(yīng)該聲明為
struct {
B bool
coefficient float32 `json:"C"`
CE float32
group int `json:"G"`
period float32 `json:"P"`
type int `json:"T"`
}
- 3 回答
- 0 關(guān)注
- 225 瀏覽
添加回答
舉報(bào)