如何进行编组和转义引号[关闭]

问题描述 投票:-4回答:1

我封送map[string]interface{},并得到一个JSON:

{
    "test": {
        "test2": 123
    }
}

interface{}在某些情况下,我有另一个map[string]interface{}

有什么办法元帅它和逃避双引号来得到这样的JSON?

{
    "test": "{
        \"test2\": 123
    }"
}
json go marshalling
1个回答
-1
投票

(假设你不关心你的期望输出换行符) - 要做到这一点是通过每个地图中的价值循环的一种方式,而这些封成一个JSON字符串首先,使用标准json.Marshal功能。然后添加这些字符串返回到原来的地图(或新地图,如果你喜欢)。现在,你有一个地图,该值实际上都是原始值的JSON字符串表示,可以名帅这个外部映射为JSON和编码器将难逃在值字符串的所有双引号为您服务。看到这个例子

package main

import (
    "fmt"
    "encoding/json"
)

var yourMap = map[string]interface{}{
    "a": 1,
    "b": map[string]interface{}{
        "c": 2,
    },
}


func transform(m map[string]interface{}) (map[string]interface{}, error) {
    newMap := make(map[string]interface{})
    for k, v := range m {
        bytez, err := json.Marshal(v)
        if err != nil {
            return nil, err
        }
        newMap[k] = string(bytez)
    }
    return newMap, nil
}

func main() {
    newMap, err := transform(yourMap)
    if err != nil {
        panic(err)
    }

    b, err := json.Marshal(newMap)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(b))
}

封装上述逻辑清晰的方法可能是宣布一个新的命名类型的地图,并实现在元帅方法新类型的自定义编组。

© www.soinside.com 2019 - 2024. All rights reserved.