gpt4 book ai didi

Golang 在 map[string]interface{} 数据上实现分页

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

我有一个 json 文件(嵌套的 json),我正在将其内容解码到 map[string] 接口(interface)中。现在我必须实现分页,因为数据很大。客户端会将所需页面作为查询参数发送,我如何 slice 我拥有的数据?这是我正在处理的数据片段:

"packages":{
"pkg1": {
"meta": {
"description": "description1",
"name": "pkg1.1"
},
"name": "pkg1.1"
},
"pkg2": {
"meta": {
"description": "description2",
"name": "pkg2.2"
},
"name": "pkg2.2"
},
}

所以我所做的是递归地遍历数据并创建一个自定义类型的数组,其中包含我需要的每个条目的数据(名称、描述),以便我可以将其用于分页。这是我使用的代码:

type Object struct {
name string
description string
}

func iterate(aMap map[string]interface{}, result *[]Object){
for key, val := range aMap {
switch val.(type) {
case map[string]interface{}:
if(key == "meta"){
switch reflect.TypeOf(val).Kind() {
case reflect.Map:
s := reflect.ValueOf(val)
var tmpData Object
if(s.MapIndex(reflect.ValueOf("name")).IsValid()){
tmpData.name = s.MapIndex(reflect.ValueOf("name")).Interface().(string)
}

if(s.MapIndex(reflect.ValueOf("description")).IsValid()){
tmpData.description = s.MapIndex(reflect.ValueOf("description")).Interface().(string)
}
*result = append(*result, tmpData)
}
}
iterate(val.(map[string]interface{}), result)
default: //DO NOTHING!!
}
}
}

最佳答案

如果您要进行分页,数据必须在某处表示为列表而不是对象?我假设在您的 JSON 中的某个地方,您有一个项目列表,否则分页没有意义。

这应该不是很难,像这样简单的事情应该可行:

const (
itemsPerPage = 10
)

var data []map[string]interface{}

// pages start at 1, can't be 0 or less.
func GetDataPage(page int) []map[string]interface{} {
start := (page - 1) * itemsPerPage
stop := start + itemsPerPage

if start > len(data) {
return nil
}

if stop > len(data) {
stop = len(data)
}

return data[start:stop]
}

关于Golang 在 map[string]interface{} 数据上实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857936/

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