如何在GJSON中循环切片

时间:2018-11-21 04:23:57

标签: json go

如何在库GJSON gjson library中循环显示范围或正则表达式#[1-12]以显示基于#的内容

这样的例子,我在下面有图片json:

enter image description here

并且我尝试像下面这样循环

tempPayments:="Envelope.Body.GetCustomReportResponse.GetCustomReportResult.ContractSummary.PaymentCalendarList.PaymentCalendar."
resultPriod1 := gjson.Get(jsonString,tempPayments + "#.Date")
for _, datePriod := range resultPriod1.Array() {
    println(datePriod[1].String())
}

我如何在“#”中显示范围[1-10]之间的结果?

1 个答案:

答案 0 :(得分:2)

Result.Array()将当前结果转换为Result[]Result)的一部分。因此,您可以只为您想要的范围切片。例如resultPriod.Array()[0:12]获取前12个元素。

以这个简化的版本为例:

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"}
        ]
    }
}`

    tempPayments := "PaymentCalendarList.PaymentCalendar."
    resultPeriod := gjson.Get(jsonString, tempPayments+"#.Date")

    # Take the first 3 results
    for _, datePeriod := range resultPeriod.Array()[0:3] {
        fmt.Println(datePeriod)
    }

}

Playground