为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过结构重新格式化 JSON?

如何通过结构重新格式化 JSON?

Go
慕无忌1623718 2023-04-04 14:07:53
我已经从给定的数据库中提取了一些数据——但是格式不符合我的要求。示例结构:type myStruct struct {    ID                  int    `json:"Id"`    Language            string `json:"Language"`    Location            string `json:"Location"`}是的,我使用表示给定返回列的自定义结构序列化给定的字符串映射:func transformJSON(extract []map[string]*sql.SqlCell) ([]byte, error) {    return json.MarshalIndent(extract, "", " ")}这将返回有效的 JSON,但格式为:  {      {      "id": {       "Value": {        "Long": 12353       }      },      "language": {       "Value": {        "String_": "ja-JP"       }      },      "location": {       "Value": {        "String_": "Osaka"       }  },参考我上面的结构,我想要这样的格式: [  {    "Id": 12353,    "Language": "ja-JP",    "Location": "Osaka"  },  // .. other objects ]假设对 的输入相同func transformJSON,我将如何将嵌套键与列类型值匹配?我应该Marshal先绘制地图,然后转换数据——还是[]map[string]*sql.SqlCell在编组之前直接使用数据结构?在我的脑海里,我在想:func transformJSON(extract []map[string]*sql.SqlCell) ([]byte, error) {    struct :=[] myStruct{}    // Loop over extract objects, match nested keys, write to struct?    return json.MarshalIndent(struct, "", " ")}
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

创建一个自定义解组器,解组整个事情,然后为您转换:


type MyStruct struct {

    ID                  int    `json:"Id"`

    Language            string `json:"Language"`

    Location            string `json:"Location"`

}


type val struct {

    Value struct {

        String string `json:"String_"`

        Long   int    `json:"Long"`

    }

}


func (s *MyStruct) UnmarshalJSON(p []byte) error {

    var result struct{

        ID       val `json:"Id"`

        Language val `json:"language"`

        Location val `json:"location"`

    }

    if err := json.Unmarshal(p, &result); err != nil {

        return err

    }

    s.ID = result.ID.Value.Long

    s.Language = result.Langauge.Value.String

    s.Location= result.Location.Value.String

    return nil

}

请注意,在此示例中完成了最少的错误检查和数据验证


查看完整回答
反对 回复 2023-04-04
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信