我有一个 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/