Tôi đang cố gắng tạo một công cụ đơn giản phân tích các dòng được định dạng JSON trong một tệp và thực hiện thao tác INSERT
vào cơ sở dữ liệu.Dấu thời gian phân tích cú pháp đầy đủ ở Golang
Tôi có một cấu trúc mà trông như thế này:
type DataBlob struct {
....
Datetime time.Time `json:"datetime, string"`
....
}
Và phân tích mã mà trông như thế này:
scanner := bufio.NewScanner(file)
// Loop through all lines in the file
for scanner.Scan() {
var t DataBlob
// Decode the line, parse the JSON
dec := json.NewDecoder(strings.NewReader(scanner.Text()))
if err := dec.Decode(&t);
err != nil {
panic(err)
}
// Perform the database operation
executionString: = "INSERT INTO observations (datetime) VALUES ($1)"
_, err := db.Exec(executionString, t.Datetime)
if err != nil {
panic(err)
}
}
tệp JSON của tôi có dòng, mỗi dòng chứa một giá trị datetime
trông như thế này :
{ "datetime": 1465793854 }
Khi định dạng datetime
được định dạng như một dấu thời gian Unix, các marshaller phàn nàn:
panic: parsing time "1465793854" as ""2006-01-02T15:04:05Z07:00"": cannot parse "1465793854" as """
Trong kịch bản mà tạo ra JSON (cũng viết bằng Golang), tôi cố gắng đơn giản in các đại diện chuỗi của các loại Time.time
, sản xuất như sau:
{ "datetime": "2016-06-13 00:23:34 -0400 EDT" }
để mà marshaller phàn nàn khi tôi đi đến phân tích nó:
panic: parsing time ""2016-06-13 00:23:34 -0400 EDT"" as ""2006-01-02T15:04:05Z07:00"": cannot parse " 00:23:34 -0400 EDT"" as "T"
Nếu tôi cũng đối xử với timestamp này (có vẻ khá chuẩn) như là một String và tránh những vấn đề marshaling, Postgres phàn nàn khi tôi cố gắng để thực hiện chèn:
panic: pq: invalid input syntax for type timestamp: "2016-06-13 00:23:34 -0400 EDT"
Đây là bực bội về một số cấp, nhưng chủ yếu bởi vì nếu tôi sắp xếp theo loại Time.time
, tôi nghĩ rằng nó vẫn nên được hiểu ở phía bên kia của quá trình.
Tôi làm cách nào để phân tích cú pháp dấu thời gian này để thực hiện chèn cơ sở dữ liệu? Xin lỗi cho câu hỏi dài và cảm ơn sự giúp đỡ của bạn!