为了账号安全,请及时绑定邮箱和手机立即绑定

如何在golang中打印变量for,in outside for,in outside for?

如何在golang中打印变量for,in outside for,in outside for?

Go
吃鸡游戏 2023-05-08 18:11:12
我有问题如何打印一个变量,在外面,在 Go 中?我正在使用库 GJSON gjson我尝试了很多方法,我只是输入了全局变量但只是出现了最终索引,例如:datePriodGlobal = DatePeriod.String()和datePriodGlobal = DatePeriod.String()我尝试的另一种方式也只是最终索引,如下所示:tempPayments:= "Envelope.Body.GetCustomReportResponse.GetCustomReportResult.ContractSummary.PaymentCalendarList.PaymentCalendar."resultMapPriodTest := gjson.Get(jsonString,tempPayments + "#.Date")    resultContractsSubmittedTest := gjson.Get(jsonString, tempPayments + "#.ContractsSubmitted")    var datePriodGlobal string    for _, DatePeriod := range  resultMapPriodTest.Array()[1:13] {        datePriodGlobal = fmt.Sprintf("%s", DatePeriod.String())    }    var contractsSubmittedGlobal string    for _, ContractsSubmitted := range resultContractsSubmittedTest.Array()[1:13]{        contractsSubmittedGlobal = fmt.Sprintf("%s", ContractsSubmitted.String())    }    fmt.Printf("%s |        %s              \t|",datePriodGlobal, contractsSubmittedGlobal)    }我有这样的 json:
查看完整描述

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)

    }


}

操场


查看完整回答
反对 回复 2023-05-08
?
茅侃侃

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)

}


查看完整回答
反对 回复 2023-05-08
  • 2 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信