欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

go json 非標準

方一強2年前8瀏覽0評論

Go語言是一種支持JSON數據的編程語言,可以使用內置的json包對JSON進行編碼和解碼。然而,有時候我們可能會面臨JSON數據不符合標準格式的情況。在這種情況下,go json包還提供了一些非標準的配置選項,讓我們能夠處理非標準的JSON數據。

比如說,如果JSON數據的鍵名沒有被引號包裹,我們可以使用以下代碼解碼該數據:

package main
import (
"encoding/json"
"fmt"
)
func main() {
data := `{
name: "Alice",
age: 30
}`
var person map[string]interface{}
err := json.Unmarshal([]byte(data), &person)
if err != nil {
panic(err)
}
fmt.Println(person)
}

輸出結果如下:

map[name:Alice age:30]

同樣地,如果JSON數據的值是NaN或Infinity,則需要使用非標準選項解碼,如下所示:

package main
import (
"encoding/json"
"fmt"
"math"
)
func main() {
data := `[NaN, Infinity, -Infinity]`
var numbers []float64
err := json.Unmarshal([]byte(data), &numbers)
if err != nil {
var fNaN, fInf, fNegInf float64
dec := json.NewDecoder(strings.NewReader(data))
dec.UseNumber()
_, err := dec.Token()
if err != nil {
panic(err)
}
n, err := dec.Token()
if err != nil {
panic(err)
}
fNaN, err = n.(json.Number).Float64()
n, err = dec.Token()
if err != nil {
panic(err)
}
if n == "Infinity" {
fInf = math.Inf(1)
} else if n == "-Infinity" {
fNegInf = math.Inf(-1)
}
numbers = []float64{fNaN, fInf, fNegInf}
}
fmt.Println(numbers)
}

輸出結果如下:

[NaN +Inf -Inf]

因此,go json包提供了豐富的選項讓我們能夠更好地處理非標準的JSON數據。