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條經驗 獲得超22個贊
“不能將‘DatePeriod’(類型結果)用作賦值中的類型字符串”
因此,變量DatePeriod
是一種Result
類型,而不是String
.?您指定要使用 打印字符串%s
,但不提供fmt.Sprintf
字符串,從而導致該錯誤。Sprintf
如果給定的值已經是 ,則不需要String
。
查看gjson.go,該Result
類型有一個String()
方法,所以你想要 instead?DatePeriod.String()
。
編輯:
從您的最新編輯來看,我想我看到了您的第二期。您的循環(huán)每次都會替換...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 關注
- 144 瀏覽
添加回答
舉報