【问题标题】:Error while printing selected fields after parsing JSON Object解析 JSON 对象后打印选定字段时出错
【发布时间】:2020-02-23 14:26:39
【问题描述】:

尝试通过 Go 解析 JSON 对象并遍历记录并仅打印选定的字段。 使用 fmt 打印时面临无法参考的问题。

JSON 对象结构:

type myBalanceInfo struct {
     Name     string                    `json:"name"`
     Id       int64                     `json:"id"`
     Balances map[string]myBalance      `json:"balances"`
}
type myBalance[]myBalanceInfo

type myBalance struct {
     Available decimal.Decimal          `json:"available"`
     Balance   decimal.Decimal          `json:"balance"`
 }

temp.json:

 {
"abc": {
    "name": "abc",
    "id": 1,
    "balances": {
        "acc1": {
            "available": "1.2",
            "balance": "1.2"
        },
        "acc2": {
            "available": "2.000001",
            "balance": "2.000001"
        },
        "acc3": {
            "available": "0.000001",
            "balance": "0.000001"
        },
        "acc4": {
            "available": "1000",
            "balance": "1000"
        }
    }
}

}

主要:

jsonInputFile := os.Open("temp.json")
defer jsonInputFile.Close()

jsonByteValue, _ := ioutil.ReadAll(jsonInputFile )
var data []myBalanceInfo
json.Unmarshal([]byte(jsonByteValue), &data )

for i := 0; i < (len(data)); i++ {
    fmt.Println("ID: " + strconv.FormatInt(data[i].Id, 10))
    fmt.Println("Balance: " + decimal.NewFromString(data[i].Balance))
}

错误:

无效操作:“余额:” + walletData[i].Balance(不匹配的类型字符串和小数。十进制)”

【问题讨论】:

  • decimal.NewFromString() 将返回 Decimal 类型而不是 string。这就是您收到该错误消息的原因

标签: json parsing go struct gofmt


【解决方案1】:

替换这一行

fmt.Println("Balance: " + decimal.NewFromString(data[i].Balance))

fmt.Println("Balance: " , data[i].Balance)

因为,

func NewFromString(value string) (Decimal, error)

将字符串作为参数并返回Decimalerror.,而您传递的值已经是Decimal

“+”号的另一件事

fmt.Println("Balance: " + decimal.NewFromString(data[i].Balance))

假设decimal.NewFromString(data[i].Balance) 返回的值是字符串,但不是。这就是你得到错误的原因。

无效操作:“余额:” + walletData[i].Balance(不匹配 类型字符串和十进制。十进制)"

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    相关资源
    最近更新 更多