首页 > 后端开发 > Golang > 如何在 Go 中动态控制 JSON 响应字段?

如何在 Go 中动态控制 JSON 响应字段?

Barbara Streisand
发布: 2024-12-11 00:30:10
原创
644 人浏览过

How to Dynamically Control JSON Response Fields in Go?

动态删除或隐藏 JSON 响应中的字段

使用 API 响应时,控制返回的特定字段通常很有用来电者。在 Go 中,结构体通常用于表示编码为 JSON 的数据。但是,静态定义的结构体标签可能无法提供足够的灵活性来动态删除或隐藏特定字段。

从结构体中删除字段

动态删除字段是不可能的来自 Go 中的结构。在结构体中声明的字段永久是类型定义的一部分。

在 JSON 响应中隐藏字段

JSON omitempty 标签可用于隐藏 JSON 响应中的空字段JSON 响应。但是,这种方法不适合需要隐藏非空字段的情况。

使用映射而不是结构

动态控制包含的字段的一种方法响应中是使用map[string]interface{}。映射是键值对的无序集合。您可以使用删除内置函数从地图中删除字段。

package main

import (
    "encoding/json"
    "fmt"
)

type SearchResults struct {
    NumberResults int                `json:"numberResults"`
    Results       []map[string]interface{} `json:"results"`
}

func main() {
    // Assume we obtained the following map from a query
    result := map[string]interface{}{
        "idCompany":   1,
        "company":     "Acme Inc.",
        "industry":    "Manufacturing",
        "idState":     5,
        "state":       "New York",
        "country":     "US",
        "otherField1": "Some Value 1",
        "otherField2": 2.3,
    }

    // Create a SearchResults struct
    searchResults := SearchResults{
        NumberResults: 1,
        Results:       []map[string]interface{}{result},
    }

    // Remove any fields not specified in the `fields` GET parameter
    fields := []string{"idCompany", "company", "state"}
    for k, v := range searchResults.Results {
        for f := range v {
            if !contains(fields, f) {
                delete(v, f)
            }
        }
    }

    // Encode the modified SearchResults as JSON
    jsonBytes, _ := json.Marshal(searchResults)

    // Print the JSON
    fmt.Println(string(jsonBytes))
}

func contains(s []string, e string) bool {
    for _, a := range s {
        if a == e {
            return true
        }
    }
    return false
}
登录后复制

在此示例中,要返回的字段在 fields GET 参数中指定。该代码会迭代地图,删除未包含在指定列表中的所有字段。最后,修改后的地图被编码为 JSON 并返回给调用者。

替代方法

另一种替代方法是仅在数据库中查询请求的字段。此方法需要修改 SQL 查询以仅包含所需的字段。虽然这种方法更有效,但并非在所有情况下都可行。

以上是如何在 Go 中动态控制 JSON 响应字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板