json - 使用 json.Unmarshal() 时保留尾随零
问题描述
这不是Stop json.Marshal() 从浮点数中去除尾随零的副本,因为我希望取消编组(即解析 JSON 编码的数据)。
.0
下面的代码中删除了尾随:https: //play.golang.org/p/jrQ3OSvoTt5。
package main
import (
"encoding/json"
"fmt"
)
func main() {
var result map[string]interface{}
json.Unmarshal([]byte(`{"foo": 1.0}`), &result)
// map[foo:1]
fmt.Println(result)
}
JSON 的结构只有在运行时才知道,所以我必须将其解析为map[string]interface{}
.
虽然我很欣赏这一点1
并且1.0
在数字上是等价的,但我需要能够区分两者。
解决方案
默认解组器使用 float64。您必须使用Decoder
with UseNumber
,然后数字将被解组为json.Number
并且您可以处理它们。
func main() {
var result map[string]interface{}
dec := json.NewDecoder(strings.NewReader(`{"foo": 1.0}`))
dec.UseNumber()
dec.Decode(&result)
// map[foo:1]
fmt.Println(result)
fmt.Println(result["foo"].(json.Number).String())
fmt.Println(result["foo"].(json.Number).Float64())
}
推荐阅读
- c# - 我对 ASPNetCore 2 Web Api 的 json 请求的自定义序列化器/转换器
- python - 使用 Kivy Touchinput 和 Kivyfile
- javascript - 尝试使用索引字段进行排序时不存在索引(芒果查询)
- javascript - 使用云代码在 Parse Server 上一次更新和保存数千个对象。代码不适用于超过 2 个对象。(Parse.Object.saveAll())
- python - 类型错误:“int”对象没有属性。python int(raw_input())
- c# - 在 C# 中访问 FTP 托管的 Web API
- php - 使用正则表达式将所有 URL 中的空格替换为 %20
- printing - 在 xpages 中打印票证
- html - 不在 HTML 源代码中的页面上出现换行符
- console - 如何使用 ANGULAR6 从控制台的本地存储中获取访问令牌?