前提・実現したいこと
APIへリクエストして返ってきたJSONデータから1000件ほどを取得し、
必要な値のみJSONファイルとして保存したい。
発生している問題・エラーメッセージ
データの書き込みはできるが、VS CodeでEnd of file expectedとエラーがでる
該当のソースコード
Go
1package main 2 3import ( 4 "encoding/json" 5 "fmt" 6 "io" 7 "log" 8 "net/http" 9 "os" 10 "strconv" 11 "time" 12) 13 14type Api_info struct { 15 api_ip string 16 a_id string 17 hits string 18 output string 19 20} 21 22type Save_info struct { 23 Title string `json:"title"` 24 Aurl string `json:"a_url"` 25} 26 27func main() { 28 29 api := Api_info{ 30 api_ip: "exapmleexapmleexapmle", 31 a_id: "exapmleexapmleexapmle", 32 hits: "30", 33 output: "json", 34 } 35 36 offset_count := 1 37 save_max_count := 1 38 39 num, _ := strconv.Atoi(api.hits) 40 41 os.Create("test_4.json") 42 43 for { 44 url := "https://api.exapmleexapmleexapmle.com" 45 46 request, err := http.NewRequest("GET", url, nil) 47 if err != nil { 48 log.Fatal(err) 49 } 50 51 params := request.URL.Query() 52 params.Add("api_id", api.api_ip) 53 params.Add("a_id", api.a_id) 54 params.Add("hits", api.hits) 55 params.Add("output", api.output) 56 57 58 request.URL.RawQuery = params.Encode() 59 fmt.Println(request.URL.String()) 60 61 62 timeout := time.Duration(5 * time.Second) 63 client := &http.Client{ 64 Timeout: timeout, 65 } 66 67 response, err := client.Do(request) 68 if err != nil { 69 log.Fatal(err) 70 break 71 } 72 defer response.Body.Close() 73 74 body, err := io.ReadAll(response.Body) 75 if err != nil { 76 log.Fatal(err) 77 } 78 79 var jsonOBJ interface{} 80 81 errr := json.Unmarshal(body, &jsonOBJ) 82 if errr != nil { 83 break 84 } 85 86 bb := jsonOBJ.(map[string]interface{})["result"] 87 cc := bb.(map[string]interface{})["items"] 88 c := cc.([]interface{}) 89 90 for _, ii := range c { 91 m := ii.(map[string]interface{}) 92 93 Title := m["title"].(string) 94 a_url := m["a_URL"].(string) 95 96 file_json := Save_info{ 97 Title, a_url, 98 } 99 100 jj, _ := json.MarshalIndent(file_json, "", " ") 101 f, _ := os.OpenFile("test_4.json", os.O_WRONLY|os.O_APPEND|os.O_CREATE, os.ModePerm) 102 f.Write(jj) 103 defer f.Close() 104 105 } 106 107 offset_count = num + offset_count 108 109 } 110 111}
自分で調べたことや試したこと
osパッケージを利用したファイルへの追記方法や
json.Marshal , json.MarshalIndentなどの使い方を調べて書きました。
JSON単一情報を書き込む情報はあったので、
それを元にループ処理させるようにしましたが、
エラーが解消しません。
使っているツールのバージョンなど補足情報
go1.18.3 linux/amd64
VS Code 1.68.1
Ubuntu 22.04
お知恵を拝借できれば幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。