まだ問題山積だけど、golangのCSVパースが通った。
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"strings"
)
type Location struct {
Lat float64 `json:"lat"`
Lng float64 `json:"lng"`
}
type Record struct {
ID int `json:"id"`
UserID int `json:"user_id"`
Distance float64 `json:"distance"`
Place []Location `json:"place"`
Speed []float64 `json:"speed"`
Prediction int `json:"prediction_type"`
StartAt string `json:"start_at"`
EndAt string `json:"end_at"`
}
func main() {
// 提供されたCSVデータ
csvData := `50,7,53.04935656638487,"[{""lat"": 34.6653, ""lng"": 135.2241}, {""lat"": 34.6653, ""lng"": 135.2241}, {""lat"": 34.6652, ""lng"": 135.2241}, {""lat"": 34.6652, ""lng"": 135.224}, {""lat"": 34.6651, ""lng"": 135.224}, {""lat"": 34.665, ""lng"": 135.224}, {""lat"": 34.6649, ""lng"": 135.2239}]","[0.0, 0.0001, 0.0002, 0.0002, 0.0004, 0.0004, 0.0004]",1,2023-03-03 07:40:00,2023-03-03 07:43:00`
// CSVデータを読み込む
r := csv.NewReader(strings.NewReader(csvData))
record, err := r.Read()
if err != nil {
fmt.Println("CSVデータを読み込めません:", err)
return
}
// CSVデータをパース
id := record[0]
userID := record[1]
distance := record[2]
placeJSON := record[3]
speedJSON := record[4]
prediction := record[5]
startAt := record[6]
endAt := record[7]
// JSONデータをパース
var place []Location
if err := json.Unmarshal([]byte(placeJSON), &place); err != nil {
fmt.Println("Placeデータをパースできません:", err)
return
}
var speed []float64
if err := json.Unmarshal([]byte(speedJSON), &speed); err != nil {
fmt.Println("Speedデータをパースできません:", err)
return
}
// パースしたデータを表示
fmt.Println("ID:", id)
fmt.Println("User ID:", userID)
fmt.Println("Distance:", distance)
fmt.Println("Place:", place)
// Placeを要素単位で表示
fmt.Println("Place:")
for _, loc := range place {
fmt.Printf("Lat: %.4f, Lng: %.4f\n", loc.Lat, loc.Lng)
}
fmt.Println("Speed:", speed)
// Speedを要素単位で表示
fmt.Println("\nSpeed:")
for i, s := range speed {
fmt.Printf("Index %d: %.4f\n", i, s)
}
fmt.Println("Prediction Type:", prediction)
fmt.Println("Start At:", startAt)
fmt.Println("End At:", endAt)
}
出力結果
ID: 50
User ID: 7
Distance: 53.04935656638487
Place: [{34.6653 135.2241} {34.6653 135.2241} {34.6652 135.2241} {34.6652 135.224} {34.6651 135.224} {34.665 135.224} {34.6649 135.2239}]
Place:
Lat: 34.6653, Lng: 135.2241
Lat: 34.6653, Lng: 135.2241
Lat: 34.6652, Lng: 135.2241
Lat: 34.6652, Lng: 135.2240
Lat: 34.6651, Lng: 135.2240
Lat: 34.6650, Lng: 135.2240
Lat: 34.6649, Lng: 135.2239
Speed: [0 0.0001 0.0002 0.0002 0.0004 0.0004 0.0004]Speed:
Index 0: 0.0000
Index 1: 0.0001
Index 2: 0.0002
Index 3: 0.0002
Index 4: 0.0004
Index 5: 0.0004
Index 6: 0.0004
Prediction Type: 1
Start At: 2023-03-03 07:40:00
End At: 2023-03-03 07:43:00