我有来自Web服务的数据:
[
{
"meter_id":"3",
"Values":[
{
"label":"SMAXSN",
"value":"E190912121751 01980"
},
{
"label":"MSG1",
"value":" PAS DE MESSAGE"
},
{
"label":"PCOUP",
"value":"03"
},
{
"label":"EASF10",
"value":"000000000"
},
{
"label":"STGE",
"value":"003A0001"
},
{
"label":"URMS1",
"value":"235"
},
{
"label":"EASF06",
"value":"000000000"
},
{
"label":"EAST",
"value":"004191456"
},
{
"label":"PREF",
"value":"03"
},
{
"label":"SMAXSN-1",
"value":"E190911223945 01940"
},
{
"label":"DATE",
"value":"E190912152027"
},
{
"label":"EASD02",
"value":"000610281"
},
{
"label":"PJOURF+1",
"value":"00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE"
},
{
"label":"NJOURF+1",
"value":"00"
},
{
"label":"ADSC",
"value":"021775806277"
},
{
"label":"EASD03",
"value":"000045963"
},
{
"label":"LTARF",
"value":" BASE"
},
{
"label":"CCASN-1",
"value":"E190912143000 00144"
},
{
"label":"EASF01",
"value":"004191456"
},
{
"label":"EASD04",
"value":"000134889"
},
{
"label":"EASD01",
"value":"003400323"
},
{
"label":"SINSTS",
"value":"00326"
},
{
"label":"CCASN",
"value":"E190912150000 00156"
},
{
"label":"VTIC",
"value":"02"
},
{
"label":"IRMS1",
"value":"001"
},
{
"label":"EASF03",
"value":"000000000"
},
{
"label":"EASF04",
"value":"000000000"
},
{
"label":"EASF08",
"value":"000000000"
},
{
"label":"RELAIS",
"value":"000"
},
{
"label":"EASF02",
"value":"000000000"
},
{
"label":"NJOURF",
"value":"00"
},
{
"label":"NTARF",
"value":"01"
},
{
"label":"UMOY1",
"value":"E190912152000 236"
},
{
"label":"EASF05",
"value":"000000000"
},
{
"label":"PRM",
"value":"23545007228637"
},
{
"label":"timestamp",
"value":"2019-09-12T15:20:02+02:00"
},
{
"label":"EASF09",
"value":"000000000"
},
{
"label":"EASF07",
"value":"000000000"
},
{
"label":"NGTF",
"value":" BASE"
}
]
},
{
"meter_id":"5",
"Values":[
{
"label":"VTIC",
"value":"02"
},
{
"label":"EASD04",
"value":"000000000"
},
{
"label":"EAST",
"value":"003048661"
},
{
"label":"NTARF",
"value":"01"
},
{
"label":"CCASN-1",
"value":"E190912143000 00060"
},
{
"label":"EASF05",
"value":"000000000"
},
{
"label":"EASF10",
"value":"000000000"
},
{
"label":"IRMS1",
"value":"000"
},
{
"label":"EASD03",
"value":"000000000"
},
{
"label":"ADSC",
"value":"021775056027"
},
{
"label":"CCASN",
"value":"E190912150000 00058"
},
{
"label":"URMS1",
"value":"241"
},
{
"label":"EASF07",
"value":"000000000"
},
{
"label":"DATE",
"value":"E190912152021"
},
{
"label":"MSG1",
"value":" PAS DE MESSAGE"
},
{
"label":"PJOURF+1",
"value":"00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE"
},
{
"label":"PRM",
"value":"23544717793089"
},
{
"label":"LTARF",
"value":" BASE"
},
{
"label":"EASF06",
"value":"000000000"
},
{
"label":"NJOURF",
"value":"00"
},
{
"label":"EASF04",
"value":"000000000"
},
{
"label":"EASD02",
"value":"000329795"
},
{
"label":"timestamp",
"value":"2019-09-12T15:20:09+02:00"
},
{
"label":"EASF08",
"value":"000000000"
},
{
"label":"EASF09",
"value":"000000000"
},
{
"label":"SMAXSN-1",
"value":"E190911071004 01100"
},
{
"label":"NGTF",
"value":" BASE"
},
{
"label":"SMAXSN",
"value":"E190912071628 01110"
},
{
"label":"PREF",
"value":"06"
},
{
"label":"NJOURF+1",
"value":"00"
},
{
"label":"EASD01",
"value":"002718866"
},
{
"label":"EASF03",
"value":"000000000"
},
{
"label":"STGE",
"value":"003A4001"
},
{
"label":"RELAIS",
"value":"000"
},
{
"label":"EASF02",
"value":"000000000"
},
{
"label":"SINSTS",
"value":"00076"
},
{
"label":"UMOY1",
"value":"E190912152000 240"
},
{
"label":"PCOUP",
"value":"06"
},
{
"label":"EASF01",
"value":"003048661"
}
]
}
]
解析后,我应该得到一个包含2个项目的meters
数组。
这是我的结构:
type Meter struct {
MeterID string `json:"meter_id"`
Values []Line `json:"Values"`
}
type Line struct {
Label string `json:"label"`
Value string `json:"value"`
}
当我使用以下命令显示原始JSON时:
var data []map[string]interface{}
body, err := ioutil.ReadAll(res.Body)
err = json.Unmarshal(body, &data)
logger.SLog.Debug(data)
我看到我看到几个meter
项目
但是当我尝试解析为:
var meters []Meter
err = json.NewDecoder(res.Body).Decode(&meters)
我还尝试使用以下方法解析数据:
body, err := ioutil.ReadAll(res.Body)
err = json.Unmarshal(body, &meters)
if err != nil {
logger.SLog.Debug(err)
}
logger.SLog.Debug(meters)
但是同样的结果,我在meters
中只得到1个项目。
为什么?
答案 0 :(得分:0)
有些奇怪。我已经在Go Playground上尝试过此代码,可以,返回2个项目,看起来:
package main
import (
"encoding/json"
"strings"
"fmt"
)
type Meter struct {
MeterID string `json:"meter_id"`
Values []Line `json:"Values"`
}
type Line struct {
Label string `json:"label"`
Value string `json:"value"`
}
func main() {
jsonData := `[{"meter_id":"3","Values":[{"label":"SMAXSN","value":"E190912121751 01980"},{"label":"MSG1","value":" PAS DE MESSAGE"},{"label":"PCOUP","value":"03"},{"label":"EASF10","value":"000000000"},{"label":"STGE","value":"003A0001"},{"label":"URMS1","value":"235"},{"label":"EASF06","value":"000000000"},{"label":"EAST","value":"004191456"},{"label":"PREF","value":"03"},{"label":"SMAXSN-1","value":"E190911223945 01940"},{"label":"DATE","value":"E190912152027"},{"label":"EASD02","value":"000610281"},{"label":"PJOURF+1","value":"00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE"},{"label":"NJOURF+1","value":"00"},{"label":"ADSC","value":"021775806277"},{"label":"EASD03","value":"000045963"},{"label":"LTARF","value":" BASE"},{"label":"CCASN-1","value":"E190912143000 00144"},{"label":"EASF01","value":"004191456"},{"label":"EASD04","value":"000134889"},{"label":"EASD01","value":"003400323"},{"label":"SINSTS","value":"00326"},{"label":"CCASN","value":"E190912150000 00156"},{"label":"VTIC","value":"02"},{"label":"IRMS1","value":"001"},{"label":"EASF03","value":"000000000"},{"label":"EASF04","value":"000000000"},{"label":"EASF08","value":"000000000"},{"label":"RELAIS","value":"000"},{"label":"EASF02","value":"000000000"},{"label":"NJOURF","value":"00"},{"label":"NTARF","value":"01"},{"label":"UMOY1","value":"E190912152000 236"},{"label":"EASF05","value":"000000000"},{"label":"PRM","value":"23545007228637"},{"label":"timestamp","value":"2019-09-12T15:20:02+02:00"},{"label":"EASF09","value":"000000000"},{"label":"EASF07","value":"000000000"},{"label":"NGTF","value":" BASE"}]},{"meter_id":"5","Values":[{"label":"VTIC","value":"02"},{"label":"EASD04","value":"000000000"},{"label":"EAST","value":"003048661"},{"label":"NTARF","value":"01"},{"label":"CCASN-1","value":"E190912143000 00060"},{"label":"EASF05","value":"000000000"},{"label":"EASF10","value":"000000000"},{"label":"IRMS1","value":"000"},{"label":"EASD03","value":"000000000"},{"label":"ADSC","value":"021775056027"},{"label":"CCASN","value":"E190912150000 00058"},{"label":"URMS1","value":"241"},{"label":"EASF07","value":"000000000"},{"label":"DATE","value":"E190912152021"},{"label":"MSG1","value":" PAS DE MESSAGE"},{"label":"PJOURF+1","value":"00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE"},{"label":"PRM","value":"23544717793089"},{"label":"LTARF","value":" BASE"},{"label":"EASF06","value":"000000000"},{"label":"NJOURF","value":"00"},{"label":"EASF04","value":"000000000"},{"label":"EASD02","value":"000329795"},{"label":"timestamp","value":"2019-09-12T15:20:09+02:00"},{"label":"EASF08","value":"000000000"},{"label":"EASF09","value":"000000000"},{"label":"SMAXSN-1","value":"E190911071004 01100"},{"label":"NGTF","value":" BASE"},{"label":"SMAXSN","value":"E190912071628 01110"},{"label":"PREF","value":"06"},{"label":"NJOURF+1","value":"00"},{"label":"EASD01","value":"002718866"},{"label":"EASF03","value":"000000000"},{"label":"STGE","value":"003A4001"},{"label":"RELAIS","value":"000"},{"label":"EASF02","value":"000000000"},{"label":"SINSTS","value":"00076"},{"label":"UMOY1","value":"E190912152000 240"},{"label":"PCOUP","value":"06"},{"label":"EASF01","value":"003048661"}]}]`
//fmt.Printf("json: %s", jsonData)
var meters []Meter
err := json.NewDecoder(strings.NewReader(jsonData)).Decode(&meters)
if err != nil {
fmt.Printf("error: %v", err)
return
}
jsonOut, err := json.Marshal(meters)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("obj len: %d\n", len(meters))
fmt.Printf("jsonOut: %s\n", jsonOut)
}
输出:
obj len: 2
jsonOut: [{"meter_id":"3","Values":[{"label":"SMAXSN","value":"E190912121751 01980"},{"label":"MSG1","value":" PAS DE MESSAGE"},{"label":"PCOUP","value":"03"},{"label":"EASF10","value":"000000000"},{"label":"STGE","value":"003A0001"},{"label":"URMS1","value":"235"},{"label":"EASF06","value":"000000000"},{"label":"EAST","value":"004191456"},{"label":"PREF","value":"03"},{"label":"SMAXSN-1","value":"E190911223945 01940"},{"label":"DATE","value":"E190912152027"},{"label":"EASD02","value":"000610281"},{"label":"PJOURF+1","value":"00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE"},{"label":"NJOURF+1","value":"00"},{"label":"ADSC","value":"021775806277"},{"label":"EASD03","value":"000045963"},{"label":"LTARF","value":" BASE"},{"label":"CCASN-1","value":"E190912143000 00144"},{"label":"EASF01","value":"004191456"},{"label":"EASD04","value":"000134889"},{"label":"EASD01","value":"003400323"},{"label":"SINSTS","value":"00326"},{"label":"CCASN","value":"E190912150000 00156"},{"label":"VTIC","value":"02"},{"label":"IRMS1","value":"001"},{"label":"EASF03","value":"000000000"},{"label":"EASF04","value":"000000000"},{"label":"EASF08","value":"000000000"},{"label":"RELAIS","value":"000"},{"label":"EASF02","value":"000000000"},{"label":"NJOURF","value":"00"},{"label":"NTARF","value":"01"},{"label":"UMOY1","value":"E190912152000 236"},{"label":"EASF05","value":"000000000"},{"label":"PRM","value":"23545007228637"},{"label":"timestamp","value":"2019-09-12T15:20:02+02:00"},{"label":"EASF09","value":"000000000"},{"label":"EASF07","value":"000000000"},{"label":"NGTF","value":" BASE"}]},{"meter_id":"5","Values":[{"label":"VTIC","value":"02"},{"label":"EASD04","value":"000000000"},{"label":"EAST","value":"003048661"},{"label":"NTARF","value":"01"},{"label":"CCASN-1","value":"E190912143000 00060"},{"label":"EASF05","value":"000000000"},{"label":"EASF10","value":"000000000"},{"label":"IRMS1","value":"000"},{"label":"EASD03","value":"000000000"},{"label":"ADSC","value":"021775056027"},{"label":"CCASN","value":"E190912150000 00058"},{"label":"URMS1","value":"241"},{"label":"EASF07","value":"000000000"},{"label":"DATE","value":"E190912152021"},{"label":"MSG1","value":" PAS DE MESSAGE"},{"label":"PJOURF+1","value":"00008001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE"},{"label":"PRM","value":"23544717793089"},{"label":"LTARF","value":" BASE"},{"label":"EASF06","value":"000000000"},{"label":"NJOURF","value":"00"},{"label":"EASF04","value":"000000000"},{"label":"EASD02","value":"000329795"},{"label":"timestamp","value":"2019-09-12T15:20:09+02:00"},{"label":"EASF08","value":"000000000"},{"label":"EASF09","value":"000000000"},{"label":"SMAXSN-1","value":"E190911071004 01100"},{"label":"NGTF","value":" BASE"},{"label":"SMAXSN","value":"E190912071628 01110"},{"label":"PREF","value":"06"},{"label":"NJOURF+1","value":"00"},{"label":"EASD01","value":"002718866"},{"label":"EASF03","value":"000000000"},{"label":"STGE","value":"003A4001"},{"label":"RELAIS","value":"000"},{"label":"EASF02","value":"000000000"},{"label":"SINSTS","value":"00076"},{"label":"UMOY1","value":"E190912152000 240"},{"label":"PCOUP","value":"06"},{"label":"EASF01","value":"003048661"}]}]