如何处理 Response JSON 有没有键的自定义字段?

查询 Api 并响应自定义 JSON,以及如何对其进行解组。示例 JSON:


{"14AcKEr19gHJvgwQhK7sfFm6YJGmoZZoqu": {

"final_balance": 61914248289,

"n_tx": 3472,

"total_received": 3479994002972

}}

密钥是一个十六进制字符串。那么如何用 golang 公约处理它,任何人都可以帮助我吗?


下面是我的尝试测试代码:


c.OnResponse(func(r *colly.Response) {

    jsonData := r.Body


    fmt.Println(string(jsonData))

    fmt.Println("==================")


    //parse bitcoin json

    jsonMap := make(map[string]interface{})

    err := json.Unmarshal([]byte(jsonData), &jsonMap)

    if err != nil {

        panic(err)

    }


    fmt.Println(jsonMap)


    dumpMap("", jsonMap)

})


func dumpMap(space string, m map[string]interface{}) {

    for k, v := range m {

        if mv, ok := v.(map[string]interface{}); ok {

            fmt.Printf("{ \"%v\": \n", k)

            dumpMap(space+"\t", mv)

            fmt.Printf("}\n")

        } else {

            fmt.Printf("%v %v : %v\n", space, k, v)

        }

    }

}

然后去运行cmd/main.go,控制台打印在这里:


{"14AcKEr19gHJvgwQhK7sfFm6YJGmoZZoqu": {

    "final_balance": 75494521080,

    "n_tx": 3493,

    "total_received": 3493574275763

}}

==================

map[14AcKEr19gHJvgwQhK7sfFm6YJGmoZZoqu:map[n_tx:3493 total_received:3.493574275763e+12 final_balance:7.549452108e+10]]

{ "14AcKEr19gHJvgwQhK7sfFm6YJGmoZZoqu":

         final_balance : 7.549452108e+10

         n_tx : 3493

         total_received : 3.493574275763e+12

}

我需要定制unmarshal func来获取字符串键吗?如果我用作14AcKEr19gHJvgwQhK7sfFm6YJGmoZZoqu密钥,我将无法轻松访问。我只是想知道如何处理它。


凤凰求蛊
浏览 69回答 1
1回答

绝地无双

您可以将其解组到地图中,这样您就可以获得生成的密钥作为地图的密钥 package mainimport (    "encoding/json"    "fmt"    "log")var input = `{"14AcKEr19gHJvgwQhK7sfFm6YJGmoZZoqu": {"final_balance": 61914248289,"n_tx": 3472,"total_received": 3479994002972}}`type object struct {    FinalBalance uint64 `json:"final_balance"`    NTX uint64 `json:"n_tx"`    TotalReceived uint64 `json:"total_received"`}func main() {    var result map[string]object;    err := json.Unmarshal([]byte(input), &result);    if err != nil {        log.Fatal(err)    }    fmt.Printf("result: %+v", result)    // result: map[14AcKEr19gHJvgwQhK7sfFm6YJGmoZZoqu:{FinalBalance:61914248289 NTX:3472 TotalReceived:3479994002972}]}
打开App,查看更多内容
随时随地看视频慕课网APP