"недопустимый символ '1' после значения верхнего уровня" демаршалинг JSON - PullRequest
6 голосов
/ 03 июля 2010

Я использую json для хранения данных на диске между вызовами программы, программа некоторое время работает нормально, но после этого выдает ошибку при декодировании json, «недопустимый символ« 1 »после значения верхнего уровня».

Кто-нибудь может предложить какое-нибудь решение этой проблемы?

Ответы [ 2 ]

5 голосов
/ 20 июля 2010

Вместо того, чтобы открывать файл вручную, рассмотрите возможность использования некоторых встроенных функций ввода-вывода.

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)
}

То же самое касается загрузки данных JSON, где вы используете ioutil.ReadFile и json.Unmarshal.

3 голосов
/ 03 июля 2010

Когда вы записываете данные на диск, вы обязательно передаете os.O_TRUNC (или иным образом усекаете файл) в флагах открытия? Если нет, программа будет работать нормально, пока вы не напишите объект меньше, чем предыдущий. Но трудно отладить код, не видя его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...