go - 如何处理响应 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
用作密钥,我将无法轻松访问。我只想知道怎么处理。
解决方案
您可以将其解组到地图中,因此您可以将生成的密钥作为地图的密钥 https://play.golang.org/p/IfEjjvKakpu
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}]
}
推荐阅读
- javascript - Bootstrap 4 和 Javascript 函数 - 验证检查后隐藏表单
- php - 致命错误:调用 Codeigniter 中未定义的函数 base_url()
- mongodb - 使用默认文档 mongo 创建集合
- sql - 函数调用的属性表示法给出错误
- javascript - 将数据推送到图表时,Chartjs 显示错误
- css - 如何动态地将一个类添加到 li 中的一个值?
- android - 当我的光标移动到edittext时,是否有一个选项可以将我的默认SIM卡号设置为我的edittext
- vb.net - 有没有办法通过图片框进行点击
- java - 如何在spring(logback.xml)中仅过滤特定的查询日志
- android - What are some examples of Build.PRODUCT in Android