Golang では、JSON はデータの送信と保存を容易にするため、重要なデータ形式です。 JSON データを処理するときに型変換は非常に一般的な操作です。この記事では、Golang での JSON 型変換について説明します。
JSON 型変換を実行する前に、JSON のデータ型を理解する必要があります。 JSON のデータ型は Golang のデータ型と完全に対応しているわけではありません。JSON には次の 6 つのデータ型があります:
Golang では、次のように使用できます。タイプ JSON データ型を表す場合:
JSON 型変換の前に、まずJSON の解析とエンコードを理解する必要があります。
encoding/json
パッケージの Decode
メソッドを使用して文字列を変換できます。または、バイト配列が JSON オブジェクトに解析されます。例:
import ( "encoding/json" "fmt" ) type Person struct { Name string Age int Address string } func main() { jsonStr := `{"Name": "Tom", "Age": 18, "Address": "Beijing"}` var p Person err := json.Unmarshal([]byte(jsonStr), &p) if err != nil { fmt.Println(err) return } fmt.Println(p.Name, p.Age, p.Address) }
上記のコードでは、Unmarshal
メソッドは JSON 文字列を Person
オブジェクトに解析します。もちろん、必要なだけであれば、map[string]interface{}
や []interface{}
などの基本的なデータ型に解析することも可能です。 #JSON エンコーディング
パッケージの Encode
メソッドは、JSON オブジェクトを文字列またはバイト配列にエンコードできます。例: <pre class='brush:go;toolbar:false;'>import (
"encoding/json"
"fmt"
)
type Person struct {
Name string
Age int
Address string
}
func main() {
p := Person{Name: "Tom", Age: 18, Address: "Beijing"}
jsonString, err := json.Marshal(p)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(jsonString))
}</pre>
上記のコードでは、
メソッドは、Person
オブジェクトを JSON 文字列にエンコードします。もちろん、map[string]interface{ のみをエンコードしたい場合は、 }
または []interface{ }
やその他の基本的なデータ型も可能です。JSON 型変換
、string
、bool
など) に変換します。また、JSON 配列を Golang の配列に変換することもできます。 JSON オブジェクトを Golang の構造体に変換します。JSON 数値を int および float64 に変換
int()。例:
import ( "encoding/json" "fmt" ) func main() { jsonStr := `{"float": 1.23, "int": 456}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } floatValue := data["float"].(float64) intValue := int(data["int"].(float64)) fmt.Println(floatValue, intValue) }
上記のコードでは、まず JSON 文字列を
map[string]interface{} 型の data オブジェクトに解析し、次に #アサーションを通じて ##data
オブジェクトの float
は float64
型の floatValue
に変換され、int
は ## に変換されます。 #int
intValue と入力します。
JSON 文字列を string に変換する
JSON の文字列を Golang の
string
import ( "encoding/json" "fmt" ) func main() { jsonStr := `{"name": "Tom"}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } name := data["name"].(string) fmt.Println(name) }
map[string]interface{} タイプの
data
data オブジェクトの
name は、アサーションを通じて
string 型の
name に変換されます。
JSON 配列を []interface{}に変換する
Golang で JSON の配列を
[]interface{}
import ( "encoding/json" "fmt" ) func main() { jsonStr := `["Tom", 18, 1.23]` var data []interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } fmt.Println(data) }
[]interface{} 型の
data
配列の各要素が正しく解析されます。 JSON オブジェクトを map[string]interface に変換する{}
JSON のオブジェクトを
map[string]interface に変換する{}
型も非常に単純で、渡すだけです。直接的な主張。例:
import ( "encoding/json" "fmt" ) func main() { jsonStr := `{"name": "Tom", "age": 18}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } fmt.Println(data) }
型の data
オブジェクトに解析します。 ##data
name と
age が含まれています。
JSON オブジェクトを構造体に変換する
JSON のオブジェクトを Golang の構造体に変換するには、構造体のフィールドを指定し、アサーションを通じて構造体のフィールド値を割り当てる必要があります。例:
import ( "encoding/json" "fmt" ) type Person struct { Name string Age int Address string } func main() { jsonStr := `{"Name": "Tom", "Age": 18, "Address": "Beijing"}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { fmt.Println(err) return } p := Person{ Name: data["Name"].(string), Age: int(data["Age"].(float64)), Address: data["Address"].(string), } fmt.Println(p) }
上記のコードでは、JSON 文字列を
map[string]interface{} 型の を通じて、オブジェクト内のキーと値のペアは、構造体
Person のフィールドに割り当てられます。 <h2>概要</h2>
<p>Golang での JSON 型変換は非常に一般的なため、JSON データを処理する際にはそれを完全に理解しておく必要があります。この記事では、Golang での JSON データ型、JSON 解析およびエンコード方法、JSON 型変換などを紹介することで、読者が Golang をより適切に適用して JSON データを処理できるようにしたいと考えています。 </p>
以上がgolangのjson型変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。