使用给定数据创建 JSON 数据作为 map[string] 接口

以下是从接收到的数据


{

  "details": [

    {

      "attdetails": [

        {

          "id": "a48c8539-caaf-49a5-9346-8e88e60e7af4",

          "name": "compute01"

        },

        {

          "id": "a48c8539-caaf-49a5-9346-8e88e60e7af4",

          "name": "compute02"


        }

      ],

      "name": "item1"

    },

    {

      "attdetails": [

        {

          "id": "85bdafa7-274e-4180-b76f-12f390a274fc",

          "name": "compute03"

        },

        {

          "id": "85bdafa7-274e-4180-b76f-12f390a274fc",

          "name": "compute04"

        }

      ],

      "name": "item1"

    }

  ]

}

我正在尝试使用以下数据创建 JSON:


["item1":

   {"compute01": "a48c8539-caaf-49a5-9346-8e88e60e7af4"},

   {"compute02": "a48c8539-caaf-49a5-9346-8e88e60e7af4"}, 

   {"compute03": "a48c8539-caaf-49a5-9346-8e88e60e7af4"}, 

   {"compute04": "a48c8539-caaf-49a5-9346-8e88e60e7af4"}

]

我尝试创建映射[字符串]接口,但我无法将它们分组在一起并将它们添加到数组中到特定的键。


以下是我正在尝试使用的示例代码:


var childrens map[string]interface{}


for _, a := range atts {

    att, ok := childrens[a.Name]

    if !ok {

        childrens[a.Name] = make([]map[string]string, 0)

    }

    var c map[string]string

    for _, each := range a.Details {

        c[each.Name] = each.Value

    }


    childrens[a.Name] = append(c, childrens[a.Name])

}


幕布斯7119047
浏览 149回答 3
3回答

12345678_0001

我认为像下面这样的东西应该可以解决问题,https://play.golang.org/p/YbZ1niXyFBR它并不完全是您想要的结构,但应该为您提供调整方向的要点。

当年话下

这是另一种选择。package mainimport (    "encoding/json"    "fmt")var raw = `{"details": [    {    "attdetails": [        {        "id": "a48c8539-caaf-49a5-9346-8e88e60e7af4",        "name": "compute01"        },        {        "id": "a48c8539-caaf-49a5-9346-8e88e60e7af4",        "name": "compute02"        }    ],    "name": "item1"    },    {    "attdetails": [        {        "id": "85bdafa7-274e-4180-b76f-12f390a274fc",        "name": "compute03"        },        {        "id": "85bdafa7-274e-4180-b76f-12f390a274fc",        "name": "compute04"        }    ],    "name": "item1"    }]}`type Data struct {    Details []struct {        AttDetails []struct {            Id   string `json:"id"`            Name string `json:"name"`        } `json:"attdetails"`        Name string `json:"name"`    } `json:"details"`}func main() {    var data Data    err := json.Unmarshal([]byte(raw), &data)    if err != nil {        fmt.Println(err)    }    output := map[string][]map[string]string{}    for _, detail := range data.Details {        for _, attdetail := range detail.AttDetails {            output[detail.Name] = append(output[detail.Name], map[string]string{                attdetail.Name: attdetail.Id,            })        }    }    // b, _ := json.Marshal(output) // non-pretty version    b, _ := json.MarshalIndent(output, "", "\t")    fmt.Println(string(b))}

胡说叔叔

func jsonToMap(jsonStr string) map[string]interface{} {    result := make(map[string]interface{})    json.Unmarshal([]byte(jsonStr), &result)    return result}示例 - https://goplay.space/#ra7Gv8A5Heh

犯罪嫌疑人X

我能够使用以下代码获得所需的结构:var cs = make(map[string][]map[string]string)for _, a := range atts{    _, ok := childrens[a.Name]    if !ok {        cs[a.Name] = make([]map[string]string, 0)    }    var c = make(map[string]string)    for _, each := range a.Details {        c[each.Name] = each.Value    }    cs[a.Name] = append(cs[a.ClassName], c)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go