色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

go json 非標(biāo)準(zhǔn)

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

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

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

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)
}

輸出結(jié)果如下:

map[name:Alice age:30]

同樣地,如果JSON數(shù)據(jù)的值是NaN或Infinity,則需要使用非標(biāo)準(zhǔn)選項解碼,如下所示:

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)
}

輸出結(jié)果如下:

[NaN +Inf -Inf]

因此,go json包提供了豐富的選項讓我們能夠更好地處理非標(biāo)準(zhǔn)的JSON數(shù)據(jù)。