Go言語でJSONを扱う方法

Go言語

ソフトウェアを開発をしていくにあたって、JSONの操作をすることは多いと思います。
この記事では、Go初心者向けに、シンプルな処理を紹介して、Go言語でJSONの操作ができるように書いています。

tag

Go言語でJSONを操作をするにあたって、構造体のタグ(struct tag)について理解をしておく必要があります。このタグでメタ情報を付与することができて、JSONの操作ができるようになります。
タグを使うにはバッククォート(`)で囲みます。jsonのキー名を指定したい場合は「json:”キー名”」と書きます。

例.

type User struct {
	ID   int64  `json:"id"`
	Name string `json:"name"`
}

JSON文字列を構造体に変換

JSON文字列から構造体に変換をする場合はjson.UnMarshalを使います。
UnMarshalをするために、string型を[]byte型に変換をしてあげる必要があります。

サンプルコード.

package main

import (
	"encoding/json"
	"log"
	"reflect"
)

// Userの構造体を定義
type User struct {
	ID   int64  `json:"id"`
	Name string `json:"name"`
}

func main() {
	// json文字列→User型に変換
	s := `{"id":4, "name":"ジョニー"}`
	var u User
	b := []byte(s)
	err := json.Unmarshal(b, &u)
	if err != nil {
		panic(err)
	}
	log.Println(reflect.TypeOf(u), u)

}

実行結果

% go run main.go 
2024/02/12 20:06:06 main.User {4 ジョニー}

User型に変換されていて、変換されたUserの値が出力されていることが確認できます。

構造体をJSON文字列に変換

構造体をjsonの文字列に変換をする場合は、json.Marshalを使う。json.Marshalは[]byte型で返されるので、出力する時はstring型に変換してあげる必要があります。

サンプルコード.

package main

import (
	"encoding/json"
	"log"
)

// Userの構造体を定義
type User struct {
	ID   int64  `json:"id"`
	Name string `json:"name"`
}

func main() {
	// json文字列User型→json文字列に変換
	user := User{
		ID:   5,
		Name: "花子",
	}
	v, err := json.Marshal(user)
	if err != nil {
		panic(err)
	}
	// []byte型で返されるため、string型にする
	log.Println(string(v))

}

実行結果

% go run main.go
2024/02/12 20:11:12 {"id":5,"name":"花子"}

JSON文字列に変換されていることが確認できます。

まとめ

今回はGo言語でJSONを操作する方法について紹介しました。
Goで開発をするにあたって、並行処理で使用するcontextやchannel、selectなどの知識が必要になります。これらについて解説をしている記事がありますので興味がありましたら、読んでもらえたらと思います。

【おすすめ記事のリンク】

コメント

タイトルとURLをコピーしました

Fatal error: Uncaught JSMin_UnterminatedStringException: JSMin: Unterminated String at byte 672: "ソフトウェアを開発をしていくにあたって、JSONの操作をすることは多いと思います。 in /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php:214 Stack trace: #0 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(152): JSMin->action(1) #1 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(86): JSMin->min() #2 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(257): JSMin::minify('{"@context":"ht...') #3 [internal function]: AO_Minify_HTML->_removeScriptCB(Array) #4 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(108): preg_replace_callback('/(\\s*)(<script\\...', in /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php on line 214