【问题标题】:Encode json array to client [duplicate]将json数组编码到客户端[重复]
【发布时间】:2020-08-24 13:33:07
【问题描述】:

我有与这个问题相反的问题。

Decode large stream JSON

在该问题中,用户询问解码一个大型传入 JSON 数组。

但是,我将如何编码一个大的传出 JSON 数组?

例如,我有一个这样的http.Handler。

enc := json.NewEncoder(resp)
for obj := range objectChannel {
    enc.Encode(obj)
}

但是,这不起作用,因为它最终会向 JavaScript 客户端发送无效的 JSON。

我必须手动修复语法吗?例如:

enc := json.NewEncoder(resp)
fmt.Fprint(resp, "[")
for obj := range objectChannel {
    enc.Encode(obj)
    fmt.Fprint(resp, ",") // and account for the last item
}
fmt.Fprint(resp, "]")

或者有没有更好的方法?

【问题讨论】:

标签: json go


【解决方案1】:

如果你已经在内存中拥有了所有的对象,那么一个一个地对元素进行编码是没有意义的,你可以这样做:

enc.Encode(lotsOfObjs)

如果你一个一个地获取对象,那么手动添加 [ 和 ] 并在它们之间添加逗号就可以了。

【讨论】:

  • 抱歉,错误的编码示例。假设您在一个通道上进行测距,而不是对数组进行测距,该通道一次为您提供 1 个对象。
  • @mh-cbon 是的,编码。
  • @425nesp,是的,正如我所说,手动添加 [, ] 和逗号就可以了。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2019-09-01
  • 2013-09-11
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多