Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
golang:我如何访问json解码字段?_Go - Fatal编程技术网

golang:我如何访问json解码字段?

golang:我如何访问json解码字段?,go,Go,我有下一个JSON数据: 因此,我尝试迭代的内容(如PHP中的foreach)是:发票->发票(是一个数组) 所以,我想做的是: package main import ( "fmt" "reflect" "encoding/json" ) func main() { json_string := `{"result":"success","totalresults":"494","startnumber":0,"numreturned":2,"invoices

我有下一个JSON数据:

因此,我尝试迭代的内容(如PHP中的foreach)是:发票->发票(是一个数组)

所以,我想做的是:

package main
import (
    "fmt"
    "reflect"
    "encoding/json"
)

func main() {
    json_string := `{"result":"success","totalresults":"494","startnumber":0,"numreturned":2,"invoices":{"invoice":[{"id":"10660","userid":"126","firstname":"Warren","lastname":"Tapiero","companyname":"ONETIME","invoicenum":"MT-453","date":"2014-03-20","duedate":"2014-03-25","datepaid":"2013-07-20 15:51:48","subtotal":"35.00","credit":"0.00","tax":"0.00","tax2":"0.00","total":"35.00","taxrate":"0.00","taxrate2":"0.00","status":"Paid","paymentmethod":"paypalexpress","notes":"","currencycode":"USD","currencyprefix":"$","currencysuffix":" USD"},{"id":"10661","userid":"276","firstname":"koffi","lastname":"messigah","companyname":"Altech France","invoicenum":"","date":"2014-03-21","duedate":"2014-03-21","datepaid":"0000-00-00 00:00:00","subtotal":"440.00","credit":"0.00","tax":"0.00","tax2":"0.00","total":"440.00","taxrate":"0.00","taxrate2":"0.00","status":"Unpaid","paymentmethod":"paypal","notes":"","currencycode":"USD","currencyprefix":"$","currencysuffix":" USD"}]}}`

    var dat map[string]interface{}
    if err := json.Unmarshal([]byte(json_string), &dat); err != nil {
        panic(err)
    }

    invoices := dat["invoices"]

    fmt.Println("\nJSON-VALUE:",json_string)
    fmt.Println("\nVar type:",invoices)
    fmt.Println("\nVar type using REFLECT:",reflect.TypeOf(invoices))

    for index,value := range invoices.invoice {
        fmt.Println(index,value)
    }

}
但是我收到了如下错误:invoices.invoice未定义(类型接口{}没有字段或方法invoice)

所以,拜托,我需要一些帮助,这是我第一天的围棋


非常感谢。

当您执行
发票:=dat[“发票”]
时,
发票的类型是
接口{}
,可以是任何东西

实际上,它是一个
map[string]接口{}
。要将
接口{}
转换为它的具体类型,需要使用这样的

for index,value := range invoices.(map[string]interface{}) {
    fmt.Println(index,value)
}
有关完整示例,请参见

但是,如果这个结构定义得很好(并非所有的json都是),那么我会定义一个可以使代码更易于阅读的结构。不要忘记在结构名中使用大写字母,然后用
json:“name”
标记命名(请参阅)