gpt4 book ai didi

arrays - 使用 Golang 重构 Json

转载 作者:IT王子 更新时间:2023-10-29 02:22:19 27 4
gpt4 key购买 nike

我有以下 JSON 响应:

[
{
"talent_id": "b520ad50-5302-45ce-9121-5ff42d67b4fb",
"platform": "facebook",
"posts": [
{
"insights": [
{
"name": "post_impressions_organic_unique",
"values": [
{
"value": 1828
}
]
},
{
"name": "post_stories_by_action_type",
"values": [
{
"like": 42
}
]
}
],
"type": "photo",
"post_id": "24225267232_10154099759037233"
},
{
"insights": [
{
"name": "post_impressions_organic_unique",
"values": [
{
"value": 864
}
]
},
{
"name": "post_stories_by_action_type",
"values": [
{
"like": 19
}
]
}
],
"type": "photo",
"post_id": "24225267232_10154099756677233"
}
]
}
]

我需要将它重组/扁平化成这样的东西:

{
"talent_id": "b520ad50-5302-45ce-9121-5ff42d67b4fb",
"platform": "facebook",
"posts": [{
"post_id": "24225267232_10154051404062233",
"type": "photo",
"organic_impressions_unique": 8288,
"post_story_actions_by_type": {
"shares": 234,
"comments": 838,
"likes": 8768
}
}, {
"post_id": "24225267232_10154051404062233",
"type": "photo",
"organic_impressions_unique": 8288,
"post_story_actions_by_type": {
"shares": 234,
"comments": 838,
"likes": 8768
}
}]
}

我正在使用一个结构来映射 JSON 响应:

type JsonData struct {
TalentID string `json:"talent_id"`
Platform string `json:"platform"`
Posts []struct {
PostID string `json:"post_id"`
Type string `json:"type"`
Insights []struct {
//Data []map[string]interface{}
Name string `json:"name"`
} `json:"insights"`
} `json:"posts"`
}

我的问题是帖子中的数据以及如何映射它,我正在使用映射来填充数据并将其编码以生成新的 JSON 结构。

这是我的代码:

    messages := [] JsonData{}
json.Unmarshal(body, &messages)

m := make(map[string]interface{})
m["talent_id"] = messages[0].TalentID
m["platform"] = messages[0].Platform

for _, p := range messages[0].Posts {

for _, i := range p.Insights {
// here is where I got lost and couldn't know how to fill the data inside the posts
}
}


jsonString, err := json.Marshal(m)
if err != nil {
fmt.Println("error:", err)
}
fmt.Println(string(jsonString))

附言指标 post_impressions_organic_unique 和 post_stories_by_action_type 不是静态的,它们可以更改或者可能会在此处返回其他键

最佳答案

保持你的结构为:

type NameValue struct {
Name string `json:"name"`
Values []map[string]interface{} `json:"values"`
}

type JsonData struct {
TalentID string `json:"talent_id"`
Platform string `json:"platform"`
Posts []struct {
PostID string `json:"post_id"`
Type string `json:"type"`
Insights []NameValue `json:"insights"`
} `json:"posts"`
}

创建另一个与此类似的结构:

type JsonDataRes struct {
TalentID string `json:"talent_id"`
Platform string `json:"platform"`
Posts []map[string]interface{} `json:"posts"`
}

在您的 JsonData 结构中获得数据后,遍历 insights 对象并手动将值分配给新的 JsonDataRes 对象以及 PostId 的值Type 在 Posts []map[string]interface{}

关于arrays - 使用 Golang 重构 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42231120/

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