用語

パース : 解析

ファイルの読み込み

  • ioutil.ReadFile("ファイル名") ([]byte, err) 
    // ファイルを閉じる作業はしなくていいらしい
    
    or
    
    os.Open("./sample.json") (File, err)
    // File型での読み込み

JSONファイルのエンコード・デコード

  • encoding/jsonパッケージを使う
  • あるデータをJSONに変換(Encode)するとき :
    Marshal()

    func Marshal(v interface{}) ([]byte, error)
     //vは変換元のデータ。返り値は[]byteとしてJSONデータ, 
     //errとして成功した場合nilが返却される。
  • JSONをあるデータに変換(Decode)するとき :
    UnMarshal(bytes []byte(JSONデータ), &data (ポインタ、型はたぶん問わない))

    func Unmarshal(data []byte, v interface{}) error
     //dataはJSONのデータ, vは変換したい型の変数
     //返り値はerrとして成功した場合nilが返却される。
     //ポインタとして渡した変数vに変換後の値が入る。

GOでFirebaseのようなJSONの形式は生成できないんじゃないか(考察)

苦戦しているところ

以下みたい形式のjsonが作れなくて苦戦してる。一応以下の形式のJSONファイルを読み込んだ時mapで返ってくるから、mapでjsonを管理するものは作ってみた。application/jsonでそのmap形式のJSONは返却できたけどこれでいいのだろうか…

{
    "key" : {
         "data": {
              "num" : "1",
              "num" : "2"
         },
         "data3": {
              "num" : "1",
              "num" : "2"
         }
    },
    "key2" : {
         "data": {
              "num" : "1",
              "num" : "2"
         },
         "data3": {
              "num" : "1",
              "num" : "2"
         }
    }, //keyが任意で追加されていく
}

対抗策1

インタフェースを構造体に設定する
参考文献 : 構造体にフィールドを追加しないで、JSONに動的にフィールドを追加したい #golang

対抗策2

reflectを使う

参考文献 : golangでStructを動的に作る方法。 - Qiita

結果

普通にできました。simple-jsonパッケージの使用で勝手にキーから構造体(正確にはmap[string]interface{})的なものを作れます。正確にはキーと値の追加という形で作れます。

参考 : https://qiita.com/TalesofFox/items/5c147a19a9ae5c41f41a
https://pkg.go.dev/github.com/bitly/go-simplejson?tab=doc

Error

type ID struct {
	WorkIDs []WorkID `json:"WorkID"`
}
var data map[string]interface{}
bytes, err := ioutil.ReadFile(filePath)
json.Unmarshal(bytes, &data)
works := make([]WorkID, num)
err = mapstructure.Decode(data["Id"], works)
if err != nil {
	fmt.Println(54)
	return IDs, err
}

 

便利なパッケージ

go-simplejson

[]byteからJSONに直した後、構造体や配列に入れずにget()等を使って直接値をとってこれるようになるパッケージ

  • simplejson.NewJson("ファイル名")
    // []byte型からsimplejson.Json型への変換 (たぶんsimplejson専用の型)

jason

jsonの読み込みに特化したパッケージ

参考 :
https://qiita.com/hironobu_s/items/602becd6b7f5995503d6
https://github.com/antonholmquist/jason

参考文献

    1. Goで簡単にJSON形式を扱うパッケージ: go-simplejson - Qiita
    2. Go 言語の ioutil パッケージを使ってみる - 倭マン's BLOG
    3. Go言語のjson.Marshal()でゆるふわにjsonを使う。 - Qiita
    4. Go言語でのJSONデータの扱い【備忘録】 - Qiita
    5. Goでテキストファイルを読み書きする時に使う標準パッケージ - Qiita

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です