Как обрабатывать Response JSON с настраиваемым полем без ключа? - PullRequest
0 голосов
/ 14 ноября 2018

Запрос Api и ответ на пользовательский JSON, как его распаковать.пример JSON:

{"14AcKEr19gHJvgwQhK7sfFm6YJGmoZZoqu": {
"final_balance": 61914248289,
"n_tx": 3472,
"total_received": 3479994002972
}}

Ключ представляет собой шестнадцатеричную строку.Итак, как справиться с соглашением о Голанге, кто-нибудь может мне помочь?

Ниже приведен мой пробный тестовый код:

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 Ответ

0 голосов
/ 14 ноября 2018

вы можете разархивировать его на карту, чтобы вы могли получить сгенерированный ключ как ключ карты 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}]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...