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

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

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

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

JSON

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

解決済

【Go】JSONをファイル保存するとEnd of file expectedエラーが出る

defire
defire

総合スコア10

Go

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

JSON

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

1回答

0評価

0クリップ

336閲覧

投稿2022/06/18 11:57

編集2022/06/19 01:27

前提・実現したいこと

APIへリクエストして返ってきたJSONデータから1000件ほどを取得し、
必要な値のみJSONファイルとして保存したい。

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

データの書き込みはできるが、VS CodeでEnd of file expectedとエラーがでる

イメージ説明

該当のソースコード

Go

package main import ( "encoding/json" "fmt" "io" "log" "net/http" "os" "strconv" "time" ) type Api_info struct { api_ip string a_id string hits string output string } type Save_info struct { Title string `json:"title"` Aurl string `json:"a_url"` } func main() { api := Api_info{ api_ip: "exapmleexapmleexapmle", a_id: "exapmleexapmleexapmle", hits: "30", output: "json", } offset_count := 1 save_max_count := 1 num, _ := strconv.Atoi(api.hits) os.Create("test_4.json") for { url := "https://api.exapmleexapmleexapmle.com" request, err := http.NewRequest("GET", url, nil) if err != nil { log.Fatal(err) } params := request.URL.Query() params.Add("api_id", api.api_ip) params.Add("a_id", api.a_id) params.Add("hits", api.hits) params.Add("output", api.output) request.URL.RawQuery = params.Encode() fmt.Println(request.URL.String()) timeout := time.Duration(5 * time.Second) client := &http.Client{ Timeout: timeout, } response, err := client.Do(request) if err != nil { log.Fatal(err) break } defer response.Body.Close() body, err := io.ReadAll(response.Body) if err != nil { log.Fatal(err) } var jsonOBJ interface{} errr := json.Unmarshal(body, &jsonOBJ) if errr != nil { break } bb := jsonOBJ.(map[string]interface{})["result"] cc := bb.(map[string]interface{})["items"] c := cc.([]interface{}) for _, ii := range c { m := ii.(map[string]interface{}) Title := m["title"].(string) a_url := m["a_URL"].(string) file_json := Save_info{ Title, a_url, } jj, _ := json.MarshalIndent(file_json, "", " ") f, _ := os.OpenFile("test_4.json", os.O_WRONLY|os.O_APPEND|os.O_CREATE, os.ModePerm) f.Write(jj) defer f.Close() } offset_count = num + offset_count } }

自分で調べたことや試したこと

osパッケージを利用したファイルへの追記方法や
json.Marshal , json.MarshalIndentなどの使い方を調べて書きました。

JSON単一情報を書き込む情報はあったので、
それを元にループ処理させるようにしましたが、
エラーが解消しません。

使っているツールのバージョンなど補足情報

go1.18.3 linux/amd64
VS Code 1.68.1
Ubuntu 22.04

お知恵を拝借できれば幸いです。
よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Go

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

JSON

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