登录
首页 >  Golang >  Go问答

编写并应用转义字符来处理引号

来源:stackoverflow

时间:2024-03-03 08:09:26 207浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《编写并应用转义字符来处理引号》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我正在编组 map[string]interface{} 并获取 json:

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

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

有什么方法可以对其进行封送并转义双引号以获得这样的 json 吗?

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

解决方案


(假设您不关心所需输出中的换行符) - 一种方法是循环遍历映射中的每个值,并首先使用标准 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))
}

封装上述逻辑的一种更简洁的方法可能是为映射声明一个新的命名类型,并在该新类型的 marshal 方法中实现自定义编组。

好了,本文到此结束,带大家了解了《编写并应用转义字符来处理引号》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>