用golang解析json数据



我试图打印出一个json值,我从一个公共API。

my json response:

[
{
"address": "0x6679eb24f59dfe111864aec72b443d1da666b360",
"name": "ARIVA",
"symbol": "ARV",
"logo": null,
"logo_hash": null,
"thumbnail": null,
"decimals": "8",
"block_number": "8242108",
"validated": 1
}
]

代码:

type TokenNamingInfo struct {
TokenName    string `json:"name"`
TokenAddress string `json:"address"`
TokenSymbol  string `json:"symbol"`
}
reqmeta, err := http.NewRequest("GET", "https://somesite.com", nil)
if err != nil {
// handle err
}
reqmeta.Header.Set("Accept", "application/json")
reqmeta.Header.Set("X-Api-Key", "api")
respmeta, err := http.DefaultClient.Do(reqmeta)
if err != nil {
// handle err
}
defer respmeta.Body.Close()
var responseTokenSymbol TokenNamingInfo
json.Unmarshal(tokensymbol, &responseTokenPrice)

然而,这是不工作的,不打印。

fmt.Println(responseTokenSymbol.name)

如果我的json和struct看起来像下面这样,这是工作的,上面的过程相同。

{
"nativePrice": {
"value": "1906303859440",
"decimals": 18,
"name": "Binance Coin",
"symbol": "BNB"
},
"usdPrice": 0.000875604424294528,
"exchangeAddress": "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73",
"exchangeName": "PancakeSwap v2"
}
type TokenPriceInfo struct {
Price           float64 `json:"usdPrice"`
ExchangeName    string  `json:"exchangeName"`
ExchangeAddress string  `json:"exchangeAddress"`
}

你想要这样的东西:

import (
"io/ioutil"
"net/http"
"fmt"
"encoding/json"
)
type TokenNamingInfo struct {
TokenName    string `json:"name"`
TokenAddress string `json:"address"`
TokenSymbol  string `json:"symbol"`
Logo  string `json:"logo"`
LogoHash  string `json:"logo_hash"`
Thumbnail  string `json:"thumbnail"`
Decimals  int `json:"decimals"`
BlockNumber  string `json:"block_number"`
Validated  string `json:"validated"`
}
reqmeta, err := http.NewRequest("GET", "https://somesite.com", nil)
if err != nil {
// handle err
}
reqmeta.Header.Set("Accept", "application/json")
reqmeta.Header.Set("X-Api-Key", "api")
respmeta, err := http.DefaultClient.Do(reqmeta)
if err != nil {
// handle err
}
defer respmeta.Body.Close()
body, err := ioutil.ReadAll(respmeta.Body)
if err != nil {
// handle err
}
fmt.Println(string(body)) // Print result
responseTokenSymbol := &TokenNamingInfo{}
err = json.Unmarshal(body, responseTokenSymbol)
if err != nil {
// handle error
}
fmt.Println(responseTokenSymbol.TokenName) // Print name

最新更新