问个 json.Marshal 转换JSON被转义反斜杠等,普通字符串

hellsam · 2022-12-30 01:19:37 · 4463 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2022-12-30 01:19:37 的主题,其中的信息可能已经有所发展或是发生改变。

mapj1 := make(map[string]interface{})
    mapj1["name"] = "名1"
    mapj1["config"] = `{"is_ok","yes"}`
    b1, _ := json.Marshal(mapj1)
    fmt.Println(string(b1))

结果:{"config":"{\"is_ok\",\"yes\"}","name":"名1"}

我要实现效果:
{"name":"名1","config":{"is_ok","yes"}}


请问我是哪里没有做对?

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4463 次点击  
加入收藏 微博
9 回复  |  直到 2023-01-05 17:50:30
hellsam
hellsam · #1 · 2年之前
看map未转换前好像数据没问题;
map[id:17 name:testing config:{"is_ok":"yes"}]

好像感觉  json.Marshal是这个函数方法会帮以上自动转换为 字符串 并且+ 反斜杠等
jan-bar
jan-bar · #2 · 2年之前

改成下面这种形式吧,你可以研究json.Marshal原理

mapj1["config"] = json.RawMessage(`{"is_ok","yes"}`)
Neightly
Neightly · #3 · 2年之前
hellsamhellsam #1 回复

~~~ 看map未转换前好像数据没问题; map[id:17 name:testing config:{"is_ok":"yes"}] 好像感觉 json.Marshal是这个函数方法会帮以上自动转换为 字符串 并且+ 反斜杠等 ~~~

// 你为什么使用`而不是"?你也知道不用"的话得加一堆转义符,那你知不知道json只支持"?
`{"is_ok","yes"}`
hellsam
hellsam · #4 · 2年之前
NeightlyNeightly #3 回复

#1楼 @hellsam ```go // 你为什么使用`而不是"?你也知道不用"的话得加一堆转义符,那你知不知道json只支持"? `{"is_ok","yes"}` ```

用什么符号毫无意义 输出结果都是一样得 这个我以前尝试过得,用·拼接省事而已

hellsam
hellsam · #5 · 2年之前
jan-barjan-bar #2 回复

改成下面这种形式吧,你可以研究`json.Marshal`原理 ```go mapj1["config"] = json.RawMessage(`{"is_ok","yes"}`) ```

嗯谢谢

Neightly
Neightly · #6 · 2年之前
hellsamhellsam #4 回复

#3楼 @Neightly 用什么符号毫无意义 输出结果都是一样得 这个我以前尝试过得,用·拼接省事而已

讳疾忌医

ling_
ling_ · #7 · 2年之前

简单点来说,是你还没了解json结构吧,值可为字符串和对象等等类型,你用map定义config的值是字符串,而你则想要config内的对象

wuzai_09
wuzai_09 · #8 · 2年之前

mapObj := make(map[string]interface{}) mapObj["name"] = "wuzai" mapObj["info"] = map[string]interface{}{ "age": 18, "sex": "男", } str, err := json.Marshal(mapObj) if err != nil { fmt.Println(err) } fmt.Println(string(str))

这样就行啦

owen
owen · #9 · 2年之前
//第一种方式
mapj1 := make(map[string]interface{})
mapj1["name"] = "名1"
mapj1["config"] = json.RawMessage(`{"is_ok":"yes"}`) //将上面的,换成:这才是json体
b1, _ := json.Marshal(mapj1)
fmt.Println(string(b1))

//第二种方式

//创建一个结构体
type Config struct {
    Ok string `json:"is_ok"`
}

func main() {
    mapj1 := make(map[string]interface{})
    mapj1["name"] = "名1"
    //mapj1["config"] = json.RawMessage(`{"is_ok":"yes"}`)
    mapj1["connfig"] = Config{Ok: "yes"}
    b1, _ := json.Marshal(mapj1)
    fmt.Println(string(b1))

}
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传