我有一个 json,其中字段可以作为字符串和数字。
{"ID": 123456}
{"ID": "12345678"}
我需要处理这两个选项。我是通过接口写的,并将类型输出到日志中。我的 ID 始终是整数。解组后 id 是否始终为 float64 还是可以有不同的类型?然后我需要将任何选项添加到字符串中
package main
import (
"fmt"
"github.com/pquerna/ffjson/ffjson"
)
type Person struct {
ID interface{}
}
func main() {
var message = "{\"ID\": 123456}"
var message1 = "{\"ID\": \"1234\"}"
var person, person1 Person
ffjson.Unmarshal([]byte(message), &person)
ffjson.Unmarshal([]byte(message1), &person1)
fmt.Printf("type=%T, value=%v\n ", person.ID, person)
fmt.Printf("type=%T, value=%v\n ", person1.ID, person1)
}
使用
ffjson
有什么具体原因吗?看起来从2019年以来就没有再碰过了。
我建议使用标准库的
encoding/json
,如下例所示。
对于数字你总会得到float64
。
import (
"encoding/json"
"fmt"
)
type Person struct {
ID interface{}
}
func main() {
var message = "{\"ID\": 123456}"
var message1 = "{\"ID\": \"1234\"}"
var person, person1 Person
json.Unmarshal([]byte(message), &person)
json.Unmarshal([]byte(message1), &person1)
fmt.Printf("type=%T, value=%v\n", person.ID, person)
fmt.Printf("type=%T, value=%v\n ", person1.ID, person1)
}
输出:
type=float64, value={123456}
type=string, value={1234}