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

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

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

Go
凤凰求蛊 2023-05-08 16:06:21
查询 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密钥,我将无法轻松访问。我只是想知道如何处理它。
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

您可以将其解组到地图中,这样您就可以获得生成的密钥作为地图的密钥 

package main


import (

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

}


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

添加回答

举报

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