検索
ホームページバックエンド開発GolangGo で Json を使用する方法を教えます

この記事は、Go 言語で Json を使用する方法を紹介する golang チュートリアル コラムによって提供されており、困っている友人の役に立てば幸いです。

エンコード

オブジェクトを JSON データにエンコードし、interface{} オブジェクトを受け入れます、[]byteerror を返します:

func Marshal(v interface{}) ([]byte, error)

Marshal この関数はオブジェクト全体を再帰的に走査し、メンバーの型によってオブジェクトを評価します。エンコーディング、型変換ルールは次のとおりです:

  • bool 型を JSONBoolean## に変換します。

  • #整数、浮動小数点数、その他の数値型は

    JSONNumber

  • に変換されます。 #string JSON の文字列に変換します ("" 引用符付き)

  • struct # の に変換します##JSON Object を作成し、

  • 配列またはスライスを
  • JSON

    Array## に再帰的にパックします。 各メンバーの型に基づきます。

  • #[]byte
  • は、最初に

    base64 エンコードされてから、JSON 文字列に変換されます

  • map
  • Object に変換され、JSON に変換されました。key である必要がありますstring

    ##interface{}
  • 実際の内部型に応じて変換します
  • #nil
  • 変換
  • JSON

    null##channel

  • func
  • 、およびその他の型は

    UnsupportedTypeError を返します。

    type ColorGroup struct { 
     ID  int 
     Name string 
     Colors []string 
    } group := ColorGroup{ 
     ID:  1, 
     Name: "Reds", 
     Colors: []string{"Crimson", "Red", "Ruby", "Maroon"}, } b, err := json.Marshal(group) if err != nil { 
     fmt.Println("error:", err) } os.Stdout.Write(b) Output: {"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]}
  • デコード

デコード JSONdata

func Unmarshal(data []byte, v interface{}) error
型変換ルールと上記のルール

var jsonBlob = []byte(`[ 
 {"Name": "Platypus", "Order": "Monotremata"}, 
 {"Name": "Quoll", "Order": "Dasyuromorphia"} 
]`) type Animal struct { 
 Name string 
 Order string 
} var animals []Animal 
err := json.Unmarshal(jsonBlob, &animals) if err != nil { 
 fmt.Println("error:", err) } fmt.Printf("%+v", animals) Output: [{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]

構造体

構造体は、処理するには大文字で始まるメンバーである必要があります。 JSON による、小文字で始まるメンバーは効果がありません。

Mashal、構造体のメンバー変数名は、JSON

Object# の key として ## に直接パッケージ化されます。 JSON;Unmashal、対応する変数名は割り当てのために自動的に照合され、大文字と小文字は区別されません。 Unmarshal の際、JSON に余分なフィールドがある場合、それらは直接破棄されます。

JSON

にフィールドがない場合は、構造内の変数に値を代入しないことは無視され、エラーは報告されません。 <pre class="brush:php;toolbar:false">type Message struct {   Name string   Body string   Time int64   inner string  } var m = Message{   Name: &quot;Alice&quot;,   Body: &quot;Hello&quot;,   Time: 1294706395881547000,   inner: &quot;ok&quot;, } b := []byte(`{&quot;nAmE&quot;:&quot;Bob&quot;,&quot;Food&quot;:&quot;Pickle&quot;, &quot;inner&quot;:&quot;changed&quot;}`) err := json.Unmarshal(b, &amp;m) if err != nil {   fmt.Printf(err.Error())   return} fmt.Printf(&quot;%v&quot;, m) Output: {Bob Hello 1294706395881547000 ok}</pre>StructTag

構造体のメンバーと JSON の間の対応関係を手動で構成する場合構造体にラベルを付けるときは、メンバーにラベルを付けます。 フィールドが

nil

または 0 値 (数値 0) の場合は、使い慣れた omitempty を使用します。 、文字列 ""、空の配列 [] など)、パッケージ化された

JSON

結果にはこのフィールドはありません。 <pre class="brush:php;toolbar:false">type Message struct {   Name string `json:&quot;msg_name&quot;`  // 对应JSON的msg_name   Body string `json:&quot;body,omitempty&quot;` // 如果为空置则忽略字段   Time int64 `json:&quot;-&quot;`    // 直接忽略字段 } var m = Message{   Name: &quot;Alice&quot;,   Body: &quot;&quot;,   Time: 1294706395881547000, } data, err := json.Marshal(m) if err != nil {   fmt.Printf(err.Error())   return} fmt.Println(string(data)) Output: {&quot;msg_name&quot;:&quot;Alice&quot;}</pre>使用の柔軟性が向上JSON

json.RawMessageを使用

json .RawMessage は、実際には []byte 型の再定義です。キャスト可能です。

構造内のフィールドの 1 つの形式が不明なシナリオがあります: <pre class="brush:php;toolbar:false">type Command struct {   ID int   Cmd string   Args *json.RawMessage  }</pre>json.RawMessage が使用されている場合、

Args

#Unmarshal

の場合、## フィールドは解析されず、バイト データは

Args に直接割り当てられます。まず最初のレイヤーの JSON データを解凍し、次に Cmd の値に基づいて Args の特定のタイプを 2 回目に決定しますアンマーシャルここで、ポインタ型 *json.RawMessage を使用する必要があることに注意してください。そうでない場合、Args[]byte

とみなされます。型は、パッケージ化時に

base64 エンコードされた文字列にパックされます。 インターフェース{}

インターフェース{}type を使用すると、JSON が自動的に対応するデータ型:

JSON的boolean 转换为boolJSON的数值 转换为float64JSON的字符串 转换为stringJSON的Array 转换为[]interface{}JSON的Object 转换为map[string]interface{}JSON的null 转换为nil
注意すべき点が 2 つあります。 1 つは、すべての

JSON 値が float64 型に自動的に変換されることです。使用する場合は、必要な int、## に手動で変換する必要があります。 #int64 およびその他の型。 2 つ目は

JSON

object で、自動的に map[string]interface{} 型に変換されます。アクセスする際は JSON ``Object'' を使用します。 ## 直接 # のフィールド名は key としてアクセスされます。 JSON データの形式がわからない場合は、interface{} を使用できます。

自定义类型

如果希望自己定义对象的打包解包方式,可以实现以下的接口:

type Marshaler interface { 
 MarshalJSON() ([]byte, error) } type Unmarshaler interface { 
 UnmarshalJSON([]byte) error 
}

实现该接口的对象需要将自己的数据打包和解包。如果实现了该接口,json在打包解包时则会调用自定义的方法,不再对该对象进行其他处理。                                                          

以上がGo で Json を使用する方法を教えますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はlearnkuで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Golang vs. C:コードの例とパフォーマンス分析Golang vs. C:コードの例とパフォーマンス分析Apr 15, 2025 am 12:03 AM

Golangは迅速な発展と同時プログラミングに適していますが、Cは極端なパフォーマンスと基礎となる制御を必要とするプロジェクトにより適しています。 1)Golangの並行性モデルは、GoroutineとChannelを介した同時性プログラミングを簡素化します。 2)Cのテンプレートプログラミングは、一般的なコードとパフォーマンスの最適化を提供します。 3)Golangのごみ収集は便利ですが、パフォーマンスに影響を与える可能性があります。 Cのメモリ管理は複雑ですが、コントロールは問題ありません。

Golangの影響:速度、効率、シンプルさGolangの影響:速度、効率、シンプルさApr 14, 2025 am 12:11 AM

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

CとGolang:パフォーマンスが重要な場合CとGolang:パフォーマンスが重要な場合Apr 13, 2025 am 12:11 AM

Cは、ハードウェアリソースと高性能の最適化が必要なシナリオにより適していますが、Golangは迅速な開発と高い並行性処理が必要なシナリオにより適しています。 1.Cの利点は、ハードウェア特性と高い最適化機能に近いものにあります。これは、ゲーム開発などの高性能ニーズに適しています。 2.Golangの利点は、その簡潔な構文と自然な並行性サポートにあり、これは高い並行性サービス開発に適しています。

Golang in Action:実際の例とアプリケーションGolang in Action:実際の例とアプリケーションApr 12, 2025 am 12:11 AM

Golangは実際のアプリケーションに優れており、そのシンプルさ、効率性、並行性で知られています。 1)同時プログラミングはゴルチンとチャネルを通じて実装されます。2)柔軟なコードは、インターフェイスと多型を使用して記述されます。3)ネット/HTTPパッケージを使用したネットワークプログラミングを簡素化、4)効率的な同時クローラーを構築する、5)ツールと最高の実践を通じてデバッグと最適化。

Golang:Goプログラミング言語が説明しましたGolang:Goプログラミング言語が説明しましたApr 10, 2025 am 11:18 AM

GOのコア機能には、ガベージコレクション、静的リンク、並行性サポートが含まれます。 1. GO言語の並行性モデルは、GoroutineとChannelを通じて効率的な同時プログラミングを実現します。 2.インターフェイスと多型は、インターフェイスメソッドを介して実装されているため、異なるタイプを統一された方法で処理できます。 3.基本的な使用法は、関数定義と呼び出しの効率を示しています。 4。高度な使用法では、スライスは動的なサイズ変更の強力な機能を提供します。 5.人種条件などの一般的なエラーは、Getest Raceを通じて検出および解決できます。 6.パフォーマンス最適化Sync.Poolを通じてオブジェクトを再利用して、ゴミ収集圧力を軽減します。

Golangの目的:効率的でスケーラブルなシステムの構築Golangの目的:効率的でスケーラブルなシステムの構築Apr 09, 2025 pm 05:17 PM

GO言語は、効率的でスケーラブルなシステムの構築においてうまく機能します。その利点には次のものがあります。1。高性能:マシンコードにコンパイルされ、速度速度が速い。 2。同時プログラミング:ゴルチンとチャネルを介してマルチタスクを簡素化します。 3。シンプルさ:簡潔な構文、学習コストとメンテナンスコストの削減。 4。クロスプラットフォーム:クロスプラットフォームのコンパイル、簡単な展開をサポートします。

SQLソートのステートメントによる順序の結果がランダムに見えるのはなぜですか?SQLソートのステートメントによる順序の結果がランダムに見えるのはなぜですか?Apr 02, 2025 pm 05:24 PM

SQLクエリの結果の並べ替えについて混乱しています。 SQLを学習する過程で、しばしば混乱する問題に遭遇します。最近、著者は「Mick-SQL Basics」を読んでいます...

テクノロジースタックの収束は、テクノロジースタック選択のプロセスにすぎませんか?テクノロジースタックの収束は、テクノロジースタック選択のプロセスにすぎませんか?Apr 02, 2025 pm 05:21 PM

テクノロジースタックの収束とテクノロジーの選択の関係ソフトウェア開発におけるテクノロジーの選択、テクノロジースタックの選択と管理は非常に重要な問題です。最近、一部の読者が提案しています...

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。