在Go中解析不確定的JSON數據可以使用json.RawMessage
類型來臨時存儲未知的JSON數據。首先,你需要定義一個結構體來表示JSON數據的模型,然后使用json.RawMessage
類型來存儲未知的字段。接下來,你可以使用json.Unmarshal
函數將JSON數據解析到定義的結構體中,并根據需要進一步處理未知的字段。
以下是一個示例代碼:
package main
import (
"encoding/json"
"fmt"
)
type UnknownData struct {
Name string `json:"name"`
Age int `json:"age"`
ExtraField json.RawMessage `json:"extra"`
}
type ExtraData struct {
Field1 string `json:"field1"`
Field2 int `json:"field2"`
}
func main() {
jsonData := `{
"name": "John Doe",
"age": 30,
"extra": {
"field1": "value1",
"field2": 42
}
}`
var data UnknownData
err := json.Unmarshal([]byte(jsonData), &data)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Name:", data.Name)
fmt.Println("Age:", data.Age)
// 處理未知字段
var extra ExtraData
err = json.Unmarshal(data.ExtraField, &extra)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Extra Field 1:", extra.Field1)
fmt.Println("Extra Field 2:", extra.Field2)
}
在上面的示例中,UnknownData
結構體定義了一個未知字段extra
,類型為json.RawMessage
,它可以存儲未知的JSON數據。在main
函數中,我們首先將JSON數據解析到UnknownData
結構體中,然后根據需要使用json.Unmarshal
再次解析未知字段extra
的數據。
輸出結果將會是:
Name: John Doe
Age: 30
Extra Field 1: value1
Extra Field 2: 42
這樣,你就可以解析不確定的JSON數據并處理其中的未知字段了。