ホームページ  >  記事  >  バックエンド開発  >  golangのjson型変換

golangのjson型変換

王林
王林オリジナル
2023-05-13 11:09:07998ブラウズ

Golang では、JSON はデータの送信と保存を容易にするため、重要なデータ形式です。 JSON データを処理するときに型変換は非常に一般的な操作です。この記事では、Golang での JSON 型変換について説明します。

JSON データ型

JSON 型変換を実行する前に、JSON のデータ型を理解する必要があります。 JSON のデータ型は Golang のデータ型と完全に対応しているわけではありません。JSON には次の 6 つのデータ型があります:

  • Object (オブジェクト): 中括弧 {} で囲まれ、コレクションを表します。キーと値のペア。値のペアを区切るにはカンマを使用します。
  • Array (配列): 角括弧 [] で囲まれ、カンマで区切られた順序付きの値のリストを表します。
  • String (文字列): 二重引用符 " で囲まれ、文字列値を表します。
  • Number (数値): 整数または浮動小数点数の数値を表します。 .
  • Boolean: true または false のブール値を表します。
  • Null: 空のオブジェクトまたは空の値を表します。

Golang では、次のように使用できます。タイプ JSON データ型を表す場合:

  • オブジェクト: map[string]interface{}
  • Array: []interface{}
  • String: string
  • 値: float64
  • ブール値: bool
  • Null 値: nil

JSON の解析とエンコード

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 エンコーディング

pass

encoding/json

パッケージの Encode メソッドは、JSON オブジェクトを文字列またはバイト配列にエンコードできます。例: <pre class='brush:go;toolbar:false;'>import ( &quot;encoding/json&quot; &quot;fmt&quot; ) type Person struct { Name string Age int Address string } func main() { p := Person{Name: &quot;Tom&quot;, Age: 18, Address: &quot;Beijing&quot;} jsonString, err := json.Marshal(p) if err != nil { fmt.Println(err) return } fmt.Println(string(jsonString)) }</pre> 上記のコードでは、

Marshal

メソッドは、Person オブジェクトを JSON 文字列にエンコードします。もちろん、map[string]interface{ のみをエンコードしたい場合は、 } または []interface{ } やその他の基本的なデータ型も可能です。JSON 型変換

JSON データを解析した後、 JSON オブジェクトを Golang の基本データ型 (

int

stringbool など) に変換します。また、JSON 配列を Golang の配列に変換することもできます。 JSON オブジェクトを Golang の構造体に変換します。JSON 数値を int および float64 に変換

#JSON 内の数値を Golang のデータ型に変換するには、2 つの一般的な方法があります。つまり、

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 オブジェクトの floatfloat64 型の 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)
}

上記のコードでは、JSON 文字列を

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

上記のコードでは、JSON 文字列を

[]interface{} 型の data

配列に解析します。出力を通じて 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)
}

上記のコードでは、JSON 文字列を

map[string]interface{}

型の data オブジェクトに解析します。 ##data

オブジェクトには、2 つのキーと値のペア

nameage が含まれています。 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{}

型の

data

オブジェクトに解析し、その後 ##アサーション #data

を通じて、オブジェクト内のキーと値のペアは、構造体

Person

のフィールドに割り当てられます。 <h2>概要</h2> <p>Golang での JSON 型変換は非常に一般的なため、JSON データを処理する際にはそれを完全に理解しておく必要があります。この記事では、Golang での JSON データ型、JSON 解析およびエンコード方法、JSON 型変換などを紹介することで、読者が Golang をより適切に適用して JSON データを処理できるようにしたいと考えています。 </p>

以上がgolangのjson型変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。