前提
Golang業務で必要なため、勉強し始めました。
JSONの扱いについてご教授いただけますでしょうか。
実現したいこと
構造体 → JSONに変換した後、実体をコピーし、
regexpにて、文字を抽出したいと考えていますが、型アサーションなどのエラーで解決できず、
質問させていただきました。
発生している問題・エラーメッセージ
cannot use b (variable of type interface{}) as type string in argument to reg.FindStringIndex: need type assertion
該当のソースコード
// You can edit this code! // Click here and start typing. package main import ( "encoding/json" "fmt" "regexp" ) type GoStruct struct { Id int `json:"id"` Version string `json:"version"` } func main() { data := GoStruct{ Id: 123, Version: "version:1.0", } bytes, _ := json.Marshal(&data) fmt.Println(string(bytes)) var a interface{} json.Unmarshal([]byte(bytes), &a) b := a.(map[string]interface{})["version"] fmt.Println(b) reg := regexp.MustCompile(`version:(\d).\d`) res := reg.FindStringIndex(b) //if res == nil { // fmt.Println("11111") //} //current := reg.FindStringSubmatch(version) //fmt.Println(current[1]) }
試したこと
構造体をJSONにデコードし、実際の表示まではできたのですが、
文字列を正規表現にて抽出するところで困っております。
補足情報(FW/ツールのバージョンなど)
Go1.19
h
Unmarshal する際は、interface{} ではなく GoStruct 型を使うとよいかと。
var a GoStruct
if err := json.Unmarshal(bytes, &a); err != nil {
panic(err)
}
b := a.Version
ありがとうございます。
GoStructですね。
因みに、他のモジュールで定義された 構造体の定義を参照するにはどうしたらよいでしょうか
そのモジュールをインポートすればよいかと。
すみません。
こちらを参考にしました。
https://qiita.com/Yarimizu14/items/e93097c4f4cfd5468259
ただ、以下でエラーになるのは、int型を返しているからでしょうか。
reg.FindStringSubmatch undefined (type []int has no field or method FindStringSubmatch
変数 reg が []int 型なのでしょう。
ありがとうございます。
結果私の記述ミスで、regを使用すべきところ resを使用していたため、
型エラーとなっておりました。
解決しました。

回答1件
あなたの回答
tips
プレビュー