gpt4 book ai didi

json - 如何将 hit.Source 反序列化为 golang 中的结构

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

我一直在使用这个存储库:

https://github.com/olivere/elastic

下一段代码是golang中elasticsearch查询的例子:

  searchResult, err := client.Search().
Index("mx").
Type("postal_code").
Source(searchJson).
Pretty(true).
Do()
if err != nil {
panic(err)
}

if searchResult.Hits.TotalHits > 0 {

for _, hit := range searchResult.Hits.Hits {
var d Document
err := json.Unmarshal(*hit.Source, &d)
if err != nil {
// Deserialization failed
}

fmt.Printf("Document by %s: %s\n", d.Colonia, d.Ciudad)

}

} else {
fmt.Print("Found no documents\n")
}

这很好用,输出是这样的:

Document by Villa de Cortes: Distrito Federal
Document by Villa de Cortes: Sinaloa
Document by Villa de Cortes: Sinaloa

但我需要像 json 数组这样的输出:

[
{

"cp": "03530",
"colonia": "Villa de Cortes",
"ciudad": "Distrito Federal",
"delegacion": "Benito Juarez",
"location": {
"lat": "19.3487",
"lon": "-99.166"
}
},
{

"cp": "81270",
"colonia": "Villa de Cortes",
"ciudad": "Sinaloa",
"delegacion": "Ahome",
"location": {
"lat": "25.1584",
"lon": "-107.7063"
}
},
{
"cp": "80140",
"colonia": "Villa de Cortes",
"ciudad": "Sinaloa",
"delegacion": "Culiacan",
"location": {
"lat": "25.0239",
"lon": "-108.032"
}
}
]

如何将 hit.Source 反序列化为文档结构?

type Document struct {
Ciudad string `json:"ciudad"`
Colonia string `json:"colonia"`
Cp string `json:"cp"`
Delegacion string `json:"delegacion"`
Location struct {
Lat string `json:"lat"`
Lon string `json:"lon"`
} `json:"location"`
}

这是脚本的完整源代码:

https://gist.github.com/hectorgool/67730c8a72f2d34b09e5a8888987ea0c

最佳答案

好吧,您正在将数据解码到文档结构中,如果您想将其打印为原始 json,您可以简单地再次编码它,因此只会显示您在文档结构中指定的标签。

如果您希望输出是一个 json 数组,只需将所有文档存储到一个 slice 中,然后将整个内容编码

var documents []Document
for (...) {
(...)
documents = append(documents, d)
}

rawJsonDocuments, err := json.Marshal(documents)
fmt.Printf("%v", string(rawJsonDocuments) )

关于json - 如何将 hit.Source 反序列化为 golang 中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40769798/

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