gpt4 book ai didi

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

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

我已经从给定的数据库中提取了一些数据——但是格式不符合我的要求。

示例结构:

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 的输入相同,我将如何将嵌套键与列类型值匹配?

我应该先编码 映射,然后转换数据——还是在编码之前直接使用[]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, "", " ")
}

最佳答案

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

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
}

请注意,在此示例中完成了最少的错误检查和数据验证——我将其留给读者作为练习。

关于json - 如何通过结构重新格式化 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52258176/

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