我的目标是根据用户请求向json添加字段。
一切都很棒,但用
显示字段时fmt.Printf("%s: %s\n", content.Date, content.Description)
发生错误:
invalid character '{' after top-level value
这是因为添加新字段后文件如下所示:
{"Date":"2017-03-20 10:46:48","Description":"new"}
{"Date":"2017-03-20 10:46:51","Description":"new .go"}
最大的问题是写入文件
reminder := &Name{dateString[:19], text} //text - input string
newReminder, _ := json.Marshal(&reminder)
我真的不知道如何正确地做到这一点
我的问题是如何将所有成员字段包装成一个对象? 迭代成员字段的最佳方法是什么?
代码可在此处找到:https://play.golang.org/p/NunV_B6sud
答案 0 :(得分:0)
您应该将提醒存储到json文件中的数组中,如@Gerben Jacobs所述,然后,每次要向数组添加新提醒时,您需要阅读{{1}的完整内容,在Go中附加新提醒,截断文件,并将新切片写入文件。这是一个快速实施https://play.golang.org/p/UKR91maQF2。
如果您有很多提醒,并且阅读,解码,编码和编写整个内容的过程变得很麻烦,您可以打开文件,实现一种方法来截断文件内容中的最后rem.json
,然后只写]
+新提醒+ ,
。
答案 1 :(得分:0)
经过一些研究,go-nuts
组中的人帮助了我并建议我使用流式json解析器来单独解析项目。
所以我需要更改提醒列表功能:
func listReminders() error {
f, err := os.Open("rem.json")
if err != nil {
return err
}
dec := json.NewDecoder(f)
for {
var content Name
switch dec.Decode(&content) {
case nil:
fmt.Printf("%#v\n", content)
case io.EOF:
return nil
default:
return err
}
}
}
现在一切都按照我想要的方式运作。