ホームページ > システムチュートリアル > Linux > jsonデータのシリアル化と逆シリアル化

jsonデータのシリアル化と逆シリアル化

王林
リリース: 2024-01-09 11:30:17
転載
4337 人が閲覧しました
###導入### json の完全名は Javascript object notation で、中国語の完全名は js object notation です。シリアル化および逆シリアル化プロトコルには、json、xml、yaml、プロトコル バッファーなどがあります。このうち、フロントエンドおよびバックエンド API の契約データの主な送信形式は json です。 json は、数値、ブール値、配列、オブジェクトの 4 つのデータ型をサポートしています。これら 4 つのデータ型を使用して、複雑なデータ モデルを構築できます。 Go 言語では、json 標準ライブラリを使用してデータのシリアル化と逆シリアル化を実装できます。このライブラリは、マップ、構造体、配列、スライス、および組み込みのプリミティブ データ型をシリアル化および逆シリアル化するための便利なメソッドを提供します。 json 標準ライブラリを使用すると、データを簡単に json 形式に変換し、必要に応じて解析して元のデータ型に戻すことができます。これにより、データ処理が非常に便利になります。

ここでは、json の使用法を説明するために 3 つの例を示します。初心者の場合、データの送受信に 1 つの構造体オブジェクトのみを使用することが多いかもしれません。以下に具体的な例を見てみましょう。 1. 構造体オブジェクトを使用してデータを受信します。 「」 type 人の構造体 { 名前文字列 `json:"name"` 年齢 int `json:"age"` } 関数 main() { データ := `{"名前": "アリス", "年齢": 25}` var p 人 err := json.Unmarshal([]byte(data), &p) エラーの場合 != nil { fmt.Println("json の解析に失敗しました:"、エラー) 戻る

###構造### jsonデータのシリアル化と逆シリアル化

タイプ パーソン構造体 { 名前文字列 `json:"name"` 年齢 int `json:"age"`

}<br> <br><br> func main() { var (
新しい1人あたり bts []バイト<br> )<br> per:=人{<br> 名前:「リリー」、<br> 年齢: 29,<br> }<br> // シリアル化<br> bts の場合、err = json.Marshal(per); err !=nil{<br> log.Fatal(err.Error())<br> 戻る### }<br><br> <br><br> if err = json.Unmarshal(bts, &newPer); err !=nil{<br> log.Fatal(err.Error()) 戻る### }
fmt.Println(newPer) }<br><br> ###地図### <br><br>関数メイン() {<br> var (<br> smap = マップ[文字列]int{ 「年齢」: 28,

「性別」: 1, 「フロア」: 12, }

newSmap = make(map[string]int) bts []バイト<br> )<br> bts の場合、err = json.Marshal(smap); err !=nil {<br> log.Fatal(err.Error())<br> 戻る### }<br> if err = json.Umarshal(bts, &newSmap); err !=nil {<br> log.Fatal(err.Error())<br> 戻る### }<br> fmt.Println(newSmap)<br> }<br><br> <br>配列またはスライス動的配列<br> <br><br>関数メイン() {<br> var (<br> 年齢 []int = []int{23, 20, 28, 25, 30}<br> bts []バイト<br> エラーエラー newAges = make([]int, len(ages))

) bts の場合、err = json.Marshal(ages); err != nil { fmt.Println(err.Error())

戻る### } if err = json.Unmarshal(bts, &newAges); err != nil {<br> fmt.Println(err.Error())<br> 戻る### }<br> fmt.Println("新しい時代: ", newAges)<br> 戻る### }<br><br> 初心者は、構造の json シリアル化と逆シリアル化については比較的明確ですが、後者の 2 つはめったに使用しない、またはまったく使用しない可能性があります。 <br> <br> <br>配列型データの場合、一部のビジネス シナリオのフロントエンドで使用されます。 <br> <br>マップ タイプの場合、サードパーティ REST インターフェイスが Go 言語サーバーで呼び出されるとき、サーバーは呼び出しが成功したかどうかを判断するために指定された戻りコードのみを必要とします。プログラマは構造体全体の定義を書きたくなかったか、あるいは怠け者だったので、戻りデータを受け取るために map[string]interface{} を使用しました。このとき、json標準ライブラリのUnmarshalでデシリアライズした後、map["err_code"].(int)でリターンコードを取得し、その後のその他の処理ロジックを実行します。 <br> <br> <br> ここでは、構造体を使用するときに時々使用する機能についても説明する必要があります。構造体の JSON でサポートされているタグ値機能は、空を省略しています。例: <br> <br>タイプ パーソン構造体 {<br> 名前文字列 `json:"name,omitempty"` 年齢 int `json:"age"`
}

これは、関数omitemptyのタグ値が設定されている場合、対応する構造体のデータ要素の値が0の場合は出力しないことを意味します。つまり、サーバーから返された構造データ内の要素が空で、この要素がフロントエンドに返されない場合は、json タグの value 属性であるomitemptyを使用できます。
  • ここでは、Didi Company のシニア エンジニアである Taowen が作成した世界最速の JSON 解析ライブラリを提供します。 github アドレス: jsoniter。
OpenFermion の詳細な紹介: クリックして表示


OpenFermion ダウンロード アドレス: クリックしてダウンロード <br> この記事はオープンソースチャイナコミュニティ[http://www.oschina.net]からの転載です。

以上がjsonデータのシリアル化と逆シリアル化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:linuxprobe.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート