2 回答
TA贡献1808条经验 获得超4个赞
我建议只遍历PaymentCalendarJSON 对象的一部分,而不是使用索引作为伪 ID 来查询每个字段。
下面是一个简单的演示:
func main() {
jsonString := `
{
"PaymentCalendarList": {
"PaymentCalendar": [
{"ContractSubmitted": 10,
"Date": "2018-01-01T01:01:01"},
{"ContractSubmitted": 20,
"Date": "2018-01-01T02:02:02"},
{"ContractSubmitted": 30,
"Date": "2018-01-01T03:03:03"}
{"ContractSubmitted": 40,
"Date": "2018-01-01T04:04:04"}
{"ContractSubmitted": 50,
"Date": "2018-01-01T05:05:05"}
]
}
}`
result := gjson.Get(jsonString, "PaymentCalendarList.PaymentCalendar")
for _, paymentCal := range result.Array()[0:3] {
date := paymentCal.Get("Date")
contractSubmit := paymentCal.Get("ContractSubmitted")
fmt.Printf("%s | %s\n", date, contractSubmit)
}
}
TA贡献1842条经验 获得超21个赞
“不能将‘DatePeriod’(类型结果)用作赋值中的类型字符串”
因此,变量DatePeriod
是一种Result
类型,而不是String
. 您指定要使用 打印字符串%s
,但不提供fmt.Sprintf
字符串,从而导致该错误。Sprintf
如果给定的值已经是 ,则不需要String
。
查看gjson.go,该Result
类型有一个String()
方法,所以你想要 instead DatePeriod.String()
。
编辑:
从您的最新编辑来看,我想我看到了您的第二期。您的循环每次都会替换...Global
字符串变量,因此您只会获得传递给 的切片中的最后一个值range
。由于您的切片长度相同,因此您最好使用以下内容:
resultMapPriodTest := gjson.Get(jsonString,tempPayments + "#.Date")
resultContractsSubmittedTest := gjson.Get(jsonString, tempPayments + "#.ContractsSubmitted")
dateArray := resultMapPriodTest.Array()[1:13]
contractsArray := resultContractsSubmittedTest.Array()[1:13]
for i := 0; i<len(dateArray); i++ {
d := dateArray[i].String()
c := contractsArray[i].String()
fmt.Printf("%s | %s \t|", d, c)
}
- 2 回答
- 0 关注
- 104 浏览
添加回答
举报