2010-07-03 23 views
6

Tôi đang sử dụng json để lưu trữ dữ liệu trên đĩa giữa các cuộc gọi chương trình, chương trình chạy tốt trong một thời gian, nhưng sau đó nó hiển thị lỗi trong giải mã json, "không hợp lệ ký tự '1' sau giá trị cấp cao nhất "."invalid character '1' sau giá trị cấp cao nhất" unmarshaling JSON

Có ai có thể đề xuất một số giải pháp cho vấn đề này không?

Trả lời

3

Khi bạn ghi dữ liệu vào đĩa, bạn có đảm bảo vượt qua os.O_TRUNC (hoặc cắt bớt tệp) trong các cờ mở không? Nếu không, chương trình sẽ hoạt động tốt cho đến khi bạn viết một đối tượng nhỏ hơn đối tượng cuối cùng. Nhưng thật khó để gỡ lỗi mã mà không thấy nó.

+0

phạt .. hiểu điểm của bạn .. cảm ơn :) – Pankaj

5

Thay vì thực hiện mở tệp thủ công, hãy cân nhắc sử dụng một số hàm IO sẵn có.

import (
    "io/ioutil" 
    "encoding/json" 
) 
... 
func Save(myobj SomeType, filename string) (err error) { 
    var data []byte 
    if data, err = json.Marshal(myobj); err != nil { 
     return 
    } 
    return ioutil.WriteFile(filename, data) 
} 

Điều tương tự cũng xảy ra khi tải dữ liệu json nơi bạn sử dụng ioutil.ReadFilejson.Unmarshal.

Các vấn đề liên quan