英文:
Using only the values of JSON data that is unmarshalled
问题
我正在寻找一种方法,将一组ID添加到一个切片中。然而,如果我不自定义解组数据,我无法获取到ID的值,而只是一个JSON对象数组。如果我自定义解组数据,我会被告知无法将这个类似切片的数据追加到切片中,因为它具有我用于解组的结构体的自定义类型。
我希望只发出一次请求,从REST API中获取"data"和"meta"信息,然后将数据解组成以下格式:
{Data:[{Ids:39647} {Ids:39648} {Ids:39649} {Ids:39650} {Ids:39651} {Ids:39652} {Ids:39653} {Ids:39654} {Ids:39655} {Ids:39656} {Ids:39657} {Ids:39658} {Ids:39659} {Ids:39660} {Ids:39661} {Ids:39662} {Ids:39663} {Ids:39664} {Ids:39665} {Ids:39666} {Ids:39667} {Ids:39668} {Ids:39669} {Ids:39670} {Ids:39671} {Ids:39672} {Ids:39673}] Meta:{Metadata:{CurrentPage:3 TotalPages:656}}}
我想要将Ids
获取为一个切片,如下所示:
[39647 39649 39650 ...]
最好不要再进行编组和解组,但是现实有时不容许。这个切片需要是[]int
类型,以便我可以将其追加到另一个切片中,并使用所有标准库切片的功能。
编辑:有人要求我在问题中添加基本的JSON结构。
{
"data": [
{
"id": 38926
},
{
"id": 38927
},
//...以此类推。
],
"meta": {
"pagination": {
"total": 163795,
"current_page": 3,
"total_pages": 81898
}
}
}
英文:
I'm looking to take a list of ids and add them to a slice. However if I don't custom unmarshall the data, I cannot get to the values of the ids and it is just an array of JSON objects. And if I do custom unmarshall the data I want, I am told that I cannot append that slice-like array of data because it has a custom type from the structs I used to unmarshall.
I would prefer to only make the request once to get both the "data" and "meta" information from a rest API, I then unmarshall that data into the following:
{Data:[{Ids:39647} {Ids:39648} {Ids:39649} {Ids:39650} {Ids:39651} {Ids:39652} {Ids:39653} {Ids:39654} {Ids:39655} {Ids:39656} {Ids:39657} {Ids:39658} {Ids:39659} {Ids:39660} {Ids:39661} {Ids:39662} {Ids:39663} {Ids:39664} {Ids:39665} {Ids:39666} {Ids:39667} {Ids:39668} {Ids:39669} {Ids:39670} {Ids:39671} {Ids:39672} {Ids:39673}] Meta:{Metadata:{CurrentPage:3 TotalPages:656}}}
I would like to get the Ids
in a slice like so:
[39647 39649 39650 ...]
Preferably without having to marshall and then unmarshall again, but beggars can't be choosers. This would then need to be of slice type []int
so that I can append it to another slice and use all standard library slice things with it.
Edit: It was requested I add the basic JSON Structure to the question.
"data": [
{
"id": 38926
},
{
"id": 38927
},
//... and so on.
],
"meta": {
"pagination": {
"total": 163795,
"current_page": 3,
"total_pages": 81898
}
}
}
答案1
得分: 1
如果你只想获取int类型的"id"字段,而不想解析整个JSON,你可以使用一个JSON解析库来实现,比如https://github.com/tidwall/gjson。
package main
import "github.com/tidwall/gjson"
json := `{
"data":[
{
"id":38926
},
{
"id":38927
}
],
"meta":{
"pagination":{
"total":163795,
"current_page":3,
"total_pages":81898
}
}
}`
func main() {
value := gjson.Get(json, "data.#.id")
println(value.Array()) // etc
}
英文:
If you just want to get a straight slice of int-"id",without unmarshalling the whole JSON, you could use a JSON parser library to do that, ex-https://github.com/tidwall/gjson.
package main
import "github.com/tidwall/gjson"
json := `{
"data":[
{
"id":38926
},
{
"id":38927
}
],
"meta":{
"pagination":{
"total":163795,
"current_page":3,
"total_pages":81898
}
}
}`
func main() {
value := gjson.Get(json, "data.#.id")
println(value.Array()) // etc
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论