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

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

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

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

JSON

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

Q&A

解決済

1回答

5501閲覧

[Go] json: cannot unmarshal object into Go value of type が発生する

nooon0800

総合スコア10

Go

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

JSON

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

0グッド

0クリップ

投稿2018/10/18 10:48

編集2018/10/18 12:34

前提

Golangの勉強のため、言語処理100本ノック#20
(http://www.cl.ecei.tohoku.ac.jp/nlp100/#sec20)を解いています。

下記の事象に陥り、試行錯誤したものの自力で脱出できなくなってしまったため、
この実装の何が問題なのかをご指摘いただきたいです。

発生している問題・エラーメッセージ

その中の処理の一部で、JSONデータをデコードする処理を書こうとしたところ、
1行目のデータは処理できますが、2行目のデータで、
** json: cannot unmarshal object into Go value of type **というエラーが発生します。

実行結果: 2018/10/18 21:25:58 json: cannot unmarshal object into Go value of type []main.Wiki exit status 1

該当のソースコード

↓ file_scan()関数 に file(ファイルパス) を与えています。

type Wiki struct { Text string `json:"text"` Title string `json:"title"` } func file_scan(file string) { f, err := os.Open(file) if err != nil { log.Fatal(err) } defer f.Close() var lines []string var wikis []Wiki reader := bufio.NewReader(f) for line := ""; err == nil; line, err = reader.ReadString('\n') { lines = append(lines,line) } if err != io.EOF { log.Fatal(err) } for i := range lines { if lines[i] != "" { if err := json.Unmarshal([]byte(lines[i]), &wikis); err != nil { log.Fatal(err) } } } for _, p := range wikis { if p.Title == "イギリス" { fmt.Print(p.Text,"\n") } } }

なお、データの終端はこのようになっています

# tail -1 jawiki-country.json {"text": "#転送 [[アイルランド共和国]]", "title": "アイルランド"}

補足情報(FW/ツールのバージョンなど)

Golang のバージョンは1.10を使用しています。

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

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

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

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

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

guest

回答1

0

自己解決

下記の書き換えで動作するようになりました。
Unmarshalの使い方を間違えていました。

var lines []string var wikis []Wiki var jsonline Wiki
for i := range lines { if lines[i] != "" { //if err := json.Unmarshal([]byte(lines[i]), &wikis); err != nil { if err := json.Unmarshal([]byte(lines[i]), &jsonline); err != nil { log.Fatal(err) wikis = append(wikis,jsonline) } } }

投稿2018/10/18 13:07

編集2018/10/18 13:26
nooon0800

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問