データを「非平坦化」するには、各キーをドットで分割して入れ子にしたオブジェクトを作成する必要があります。 Here is an exampleにGo Playgroundのデータを入力します。
func unflatten(flat map[string]interface{}) (map[string]interface{}, error) {
unflat := map[string]interface{}{}
for key, value := range flat {
keyParts := strings.Split(key, ".")
// Walk the keys until we get to a leaf node.
m := unflat
for i, k := range keyParts[:len(keyParts)-1] {
v, exists := m[k]
if !exists {
newMap := map[string]interface{}{}
m[k] = newMap
m = newMap
continue
}
innerMap, ok := v.(map[string]interface{})
if !ok {
return nil, fmt.Errorf("key=%v is not an object", strings.Join(keyParts[0:i+1], "."))
}
m = innerMap
}
leafKey := keyParts[len(keyParts)-1]
if _, exists := m[leafKey]; exists {
return nil, fmt.Errorf("key=%v already exists", key)
}
m[keyParts[len(keyParts)-1]] = value
}
return unflat, nil
}
JSONをネストされていない形式で処理しているのはなぜですか?追加情報がなければ、それは奇妙な変換のように思えます。 –
私はRedisに格納する必要があるので、Redisにjsonを格納すると特定のキーを検索できません。 それは私がなぜkey1にキーを変換するのですか?key2:key3:valueなどです。しかし、ある時点で私は再びjsonでそれを必要とします。 – Alen
それは理にかなっています。 gojsonexplodeパッケージの反転機能を記述しようとしましたか? –