arrays - 使用一组键拆分对象数组

标签 arrays go go-interface

我有一个 json 的例子如下:

{"key1": "val1", "key2": "val2", "key3": [{"k1": v1"}, {"k2": "v2"}]}

现在我需要将它分成两个对象:

{"key1": "val1", "key2": "val2", "key3": {"k1": v1"}}{"key1": "val1", "key2": "val2", "key3": {"k2": v2"}}

基本上我想拆分 key3 元素,在新结构中保持所有其他键相同。

我的结构如下:

type myType struct {
    key1 string
    key2 string
    key3 []interface{}
}

请告诉我如何实现。

关于, -M-

最佳答案

您的结构存在一个小问题:必须导出属性,以便可以将值解码到结构中。此外,您必须标记属性。

如果你想根据 Key3 中的值拆分 myType 的实例,你必须手动进行。

下面是工作示例:

package main

import (
    "encoding/json"
    "fmt"
)

var bytes = []byte(`{"key1": "val1", "key2": "val2", "key3": [{"k1": "v1"}, {"k2": "v2"}]}`)

type myType struct {
    Key1 string        `json:"key1"`
    Key2 string        `json:"key2"`
    Key3 []interface{} `json:"key3"`
}

func (mt myType) Split() []myType {
    res := make([]myType, len(mt.Key3))

    for i, k3 := range mt.Key3 {
        res[i] = myType{Key1: mt.Key1, Key2: mt.Key2, Key3: []interface{}{k3}}
    }

    return res
}

func main() {
    t := &myType{}
    err := json.Unmarshal(bytes, t)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", t.Split())
}

关于arrays - 使用一组键拆分对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48796413/

相关文章:

javascript - jQuery 嵌套数组..获取直接父 id

C++ 多维数组的可能性

go - 我如何在golang中转换指针类型

templates - 如何处理模板中的字符串格式

go - 创建结构时正确使用接口(interface)

go - 接口(interface)和指针接收器

c - 结构数组

string - Golang : Issues replacing newlines in a string from a text file

Golang结构体指针调用接口(interface)方法

c++ - 数组索引分配时程序崩溃