ホームページ >バックエンド開発 >Golang >golangはjsonを実装します

golangはjsonを実装します

王林
王林オリジナル
2023-05-27 14:37:091594ブラウズ

Golang は非常に人気のあるプログラミング言語であり、ネットワーク サーバー、インターネット ビッグ データ処理、アルゴリズム開発などの分野で広く使用されています。その中で、Golang はデータのシリアル化と逆シリアル化のための完全なメカニズムを提供します。その中で最も重要なのは、JSON 形式のデータのサポートです。この記事では、Golang が JSON データのシリアル化と逆シリアル化を実装する方法について説明します。

1. JSON の概要

JSON は JavaScript Object Notation の略で、読み取り、書き込み、解析が簡単な軽量のデータ交換形式です。 2001 年に Douglas Crockford によって初めて提案され、RFC 7159 で正式に定義されました。 JSON 形式のデータはキーと値のペアで構成されます。キー名は文字列で、値は文字列、数値、ブール値、配列、オブジェクト、および null です。

JSON データの基本形式は次のとおりです:

{
    "name": "Jack",
    "age": 30,
    "address": {
        "city": "New York",
        "zip": 10001
    },
    "hobbies": ["Swimming", "Reading"]
}

2. Golang の JSON 処理

Golang は、次の「encoding/json」パッケージを通じて JSON データの処理を提供します。標準ライブラリ処理のサポート。このパッケージには、JSON をエンコードおよびデコードするための関数が含まれており、Go 言語の struct (構造型) を JSON バイト配列に、またはその逆に変換できます。

このパッケージを使用する前に、いくつかの基本概念を理解する必要があります。

  1. Marshal と Unmarshal

Golang では、Go 言語のデータ型を JSON 形式のデータに変換するプロセスを Marshal と呼び、JSON データを Go 言語に変換するプロセスデータ型は Unmarshal と呼ばれます。

  1. Struct タグ

Golang では、構造型のフィールドに構造タグ (Struct タグ) を通じて注釈を付けることができます。このタグは、JSON をエンコードおよびデコードするときにフィールドの名前、タイプ、サイズをカスタマイズできます。

例は次のとおりです:

type Person struct {
    Name    string `json:"name"`
    Age     int    `json:"age"`
    Address string `json:"address"`
}

この例では、人物構造には名前、年齢、住所の 3 つのフィールドが含まれています。 JSON の標準の命名方法は、Go 言語で一般的に使用される小文字の最初の文字と一致しないため、json タグを使用して、データをエンコードするときにどのフィールド名を使用するかを JSON エンコードおよびデコード関数に指示する必要があります。 。

3. JSON データのエンコーディング

Golang では、Go 言語のデータ型を JSON 形式のデータに変換するプロセスを Marshal と呼びます。このプロセスでは、「encoding/json」パッケージ内の関数「json.Marshal()」を利用します。

次は、json.Marshal() 関数を使用して、Golang のデータ型を JSON 形式のデータにエンコードする例です。

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name    string `json:"name"`
    Age     int    `json:"age"`
    Address string `json:"address"`
}

func main() {
    p := Person{
        Name:    "Tom",
        Age:     20,
        Address: "Shanghai",
    }

    data, err := json.Marshal(p)
    if err != nil {
        fmt.Println("Json marshal error:", err)
        return
    }

    fmt.Println(string(data))
}

出力結果は次のとおりです。 ##上記 コードでは、構造型 Person を定義し、この構造型の各フィールドに json タグを与えます。 main 関数では、タイプ Person のインスタンス p を作成し、json.Marshal() 関数を使用してそれを JSON 形式のデータにエンコードします。最終結果はバイト配列ですが、これは string() 関数を使用して文字列に変換する必要があります。

4. JSON データのデコード

Golang では、JSON 形式のデータを Go 言語のデータ型に変換するプロセスを Unmarshal と呼びます。この処理では、「encoding/json」パッケージ内の関数「json.Unmarshal()」を利用します。

以下は、json.Unmarshal() 関数を使用して、JSON 形式のデータを Golang のデータ型にデコードする例です。

{"name":"Tom","age":20,"address":"Shanghai"}

出力結果は次のとおりです。

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name    string `json:"name"`
    Age     int    `json:"age"`
    Address string `json:"address"`
}

func main() {
    jsonString := `{"name":"Tom","age":20,"address":"Shanghai"}`

    var p Person
    err := json.Unmarshal([]byte(jsonString), &p)
    if err != nil {
        fmt.Println("Json Unmarshal error:", err)
        return
    }

    fmt.Println(p.Name, p.Age, p.Address)
}

上記のコードでは、まず Person タイプのインスタンスを表す文字列を JSON 形式で定義します。次に、 json.Unmarshal() 関数を使用して、それを Golang のデータ型にデコードします。このプロセスでは、デコード結果を保存するために、初期化されていない変数をターゲット変数として指定する必要があります。この例では、p という名前の Person 構造体タイプの変数を使用します。この関数は、デコードされたデータを保持するための 2 番目のパラメーターとしてバイト配列へのポインターも受け入れます。

5. 結論

この記事では、Golang を使用して JSON データをエンコードおよびデコードする方法を紹介します。このプロセスは、さまざまなインターネット API との対話が必要なタスクを扱う場合に非常に実用的です。さらに、データ送信を処理するプロセスでは、JSON を習得することが依然として非常に重要です。 Golang で JSON データを処理する方法について詳しく知りたい場合は、公式ドキュメントの「encoding/json」パッケージの説明を確認してください。

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

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