質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

2回答

639閲覧

GoでJsonの文字を取得する

退会済みユーザー

退会済みユーザー

総合スコア0

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

0クリップ

投稿2022/03/30 07:02

編集2022/03/30 07:12

GoでJsonの文字を取得しようとしています。
以下HPを参考にしてみたのですが、「インターフェイス{}はnilであり、map [string]interface{}ではありません」と表示され、できませんでした。

https://dev.classmethod.jp/articles/golang-json-read-and-write/

test.json

1{ 2 "animal": { 3 "name": "ぽてと" 4 } 5}

test.go

1 func loadJson(inputPath string) interface{} { 2 byteArray, _ := ioutil.ReadFile(inputPath) 3 var jsonObj interface{} 4 _ = json.Unmarshal(byteArray, &jsonObj) 5 return jsonObj 6} 7func main() { 8jsonObj := loadJson("/go/test.json") 9fmt.Println(jsonObj.(map[string]interface{})["animal"].([]interface{})[0].(map[string]interface{})["name"].(string)) 10}

どうすればGoで「ぽてと」を取得できるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/03/30 07:09

おそらく質問文を書く際の間違いかと思うのですが、 jsonObj := loadJson("/go/test.go") は jsonObj := loadJson("/go/test.json") ですよね?
退会済みユーザー

退会済みユーザー

2022/03/30 07:12

失礼しました。 おっしゃる通りでしたので修正いたしました。
guest

回答2

0

ベストアンサー

参照している記事に記載されている JSON 文字列と違って、途中の配列がありませんので以下の様にします(([]interface{})[0] を削除)。

go

1 fmt.Println(jsonObj.(map[string]interface{})["animal"].(map[string]interface{})["name"].(string))

投稿2022/03/30 07:31

melian

総合スコア19798

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/03/30 07:51

ご回答ありがとうございます。 変更してみたのですが、「interface conversion: interface {} is nil, not map[string]interface {}」とエラーになってしまいました。 Jsonのデータ自体取得できていないのかと思ったのですが、io/ioutilはインポートしており、ファイルパスはコピペしているので記載ミスではなさそうでした・・・
melian

2022/03/30 07:55

一旦、fmt.Println(jsonObj) を実行して jsonObj の中身を確認してみて下さい。こちらで試すと、 map[animal:map[name:ぽてと]] と表示されています。
退会済みユーザー

退会済みユーザー

2022/03/30 09:07

すみません、余分なスペースが入っていたせいでした。 こちらで取得できました。 ありがとうございます!
guest

0

go

1 fmt.Println(jsonObj.(map[string]interface{})["animal"]. (map[string]interface{})["name"].(string)) 2// fmt.Println(jsonObj.(map[string]interface{})["animal"].([]interface{})[0].(map[string]interface{})["name"].(string)) 3// ^^^^^^^^^^^^^^^^^^^ 余計

投稿2022/03/30 07:31

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問