gpt4 book ai didi

json - 如何更改我从 go 服务器返回数据的格式而不存储它

转载 作者:数据小太阳 更新时间:2023-10-29 03:30:46 25 4
gpt4 key购买 nike

我正在对从 channel 中获取的每个搜索结果进行编码,然后将其发送给响应编写器,然后刷新它,但这样发送的数据如下:

[{..}]
[{..}]
[{..}]

这是具有单个值的多个数组

但是我要求发送数据的格式是这样的[{..},{..},{..}] 这是一个具有多个值的数组。

如果我之前将数据存储在一个变量中,然后对整个数据进行编码,则可以做到这一点,但如果我存储它,我的运行时就会耗尽内存。

有没有什么办法可以不存储就把它转换成想要的格式,或者如何解决我的内存问题。

我在 4gb ram sles12 sp3 系统中运行我的 go 服务器

ch := make(chan *ldap.SearchResult)
//result := &ldap.SearchResult{}

flusher, ok := w.(http.Flusher)

if !ok {
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
return
}

wg := sync.WaitGroup{}
wg.Add(1)

go func() {
for res := range ch {
resp := SearchResultToObjectType(res)

json.NewEncoder(w).Encode(resp)

flusher.Flush()
//result.Entries = append(result.Entries, res.Entries...)
//result.Controls = append(result.Controls, res.Controls...)
//result.Referrals = append(result.Referrals, res.Referrals...)
}
wg.Done()
}()

err = conn.SearchWithChannel(searchRequest, ch)

wg.Wait()

if err != nil {
json.NewEncoder(w).Encode(utils.ParseErrorToJson(err))
event.LogEventError(err, nil)
}

最佳答案

一种选择是手动构造外部 JSON 数组,使用如下所示:

first := true
w.Write([]byte("["))
for res := range ch {
if not first {
w.Write([]byte(","))
}
first = false
...
json.NewEncoder(w).Encode(resp)
...
}
w.Write([]byte("]"))

关于json - 如何更改我从 go 服务器返回数据的格式而不存储它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57352875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com