json - 使用 JSON 从巨大的字符串中解码少量数据

标签 json go

我有一个代表比特币网络交易数据的字符串。我希望我能以这样一种方式解码字符串(名为 my_data),以便我只能检索“哈希”字段的值。我已经尝试了一个小例子(在实际情况下我会有一个数组,每个位置都包含一个传输数据,就像您在代码中看到的那样):

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    var my_data = []byte(`{
   "ver":1,
   "inputs":[
      {
         "sequence":4294967295,
         "prev_out":{
            "spent":true,
            "tx_index":156978299,
            "type":0,
            "addr":"34cXotJvHAz1RVFtmK2vU29E9d5hF2manG",
            "value":848231245,
            "n":1,
            "script":"a914200f3e946fcf58d3f0787034a610860f0b96332d87"
         },
             "script":"004730440220149e4cd90c7b2648e89d357162f383098504eea21d390f02e5a289e114ed36520220556da97f0e6789d34f4fb1faf7a1c1055368c01ede85b8101be5007f7b9f3c190147304402200d72e1b91684cdb0e63ea2a24d6ae0b9e38dacdf068e2e08e46ce7f951cdc9dd0220242be0131722287bc15e3d802ba3dea9df0c18f3ec0ac6913b4146f7deb717c90147522102dfd3c8864cddd4d88a8f602d016a656132f89f66450966f9a4a45dea11ec6eb92102c5f064226fcd75fdcae289118b0c4d20e1bafbf4068e7102baec66fade94e3b952ae"
      }
   ],
   "block_height":417695,
   "relayed_by":"138.201.2.34",
   "out":[
      {
         "spent":false,
         "tx_index":156978302,
         "type":0,
         "addr":"1PWDLsx73qfyCUga29ffAjc2UVdWEeeHDL",
         "value":3123438,
         "n":0,
         "script":"76a914f6d92221d499bf8c01a0dc6f0c04b82d6b62301f88ac"
      },
      {
         "spent":true,
         "tx_index":156978302,
         "type":0,
         "addr":"34cXotJvHAz1RVFtmK2vU29E9d5hF2manG",
         "value":845057807,
         "n":1,
         "script":"a914200f3e946fcf58d3f0787034a610860f0b96332d87"
      }
   ],
   "lock_time":0,
   "size":334,
   "double_spend":false,
   "time":1466725723,
   "tx_index":156978302,
   "vin_sz":1,
   "hash":"fae2577ff2a1cfa977c7a883ea4e594c91bd67c767ef1b7870475022c08a453b",
   "vout_sz":2
}`)
    type Tx struct {
        hash string
    }
    var txs []Tx
    err := json.Unmarshal(my_data, &txs)
    if err != nil {
        fmt.Println("error:", err)
    }
    for i:=0; i<len(txs); i++{
        fmt.Printf("%s\n\n", txs[i].hash)
    }
}

但我不断收到以下错误:

error: json: cannot unmarshal object into Go value of type []main.Tx

有没有我可以尝试的更简单的方法,不需要“encoding/json”库?

提前致谢!

编辑:

我的代码改编 self 从 here 中提取的示例.

我认为问题出在我试图解码的字符串中,因为它所基于的模式允许嵌套列表和带引号或不带引号的字段值。虽然我不确定。

最佳答案

Kaedys在这两个方面都是正确的。

  1. 您的 JSON 是一个对象,而不是数组。

  2. 您没有在结构中导出“哈希”字段,encoding/json 库需要它。

如果将输入 JSON 放在方括号中(使其成为数组)并将“哈希”字段名称大写,则 code will work .

关于json - 使用 JSON 从巨大的字符串中解码少量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38019367/

相关文章:

go - 无法通过 SSH 安装 go 模块(私有(private)嵌套存储库)

variables - 短声明运算符隐藏全局变量

javascript - 在 AJAX 请求上发送 JSON 对象,在服务器上未定义

go - 在golang中实现接口(interface)给方法有指针接收者

google-app-engine - GoLang/Google App Engine - 目录结构

jQuery UI 选项卡 : JSON not displaying

go - 在 golang 中从 stdin 读取输入

java - 如何将动态 JSON 属性映射到固定 POJO 字段

ios - Alamofire:参数未传递到服务器

python - 从 JSON 对象生成特定字段