有没有大佬帮忙解释 marshal 这个原理?

问题描述

看了点源码

go 源码说默认转化了,不过现在想的是我如何把转化的这三个符号转回来
有没有大佬帮忙解释 marshal 这个原理?

接口返回得到的结果

这是啥原理,打印正常显示 & 但赋值又变原型
有没有大佬帮忙解释 marshal 这个原理?

// 结构体
type facebookUser struct {
    .
    .
    Picture   struct {
        Data struct {
            // !!!! 问题点 !!!!
            URL string `json:"url"`
        } `json:"data"`
    } `json:"picture"`
    .
    .
}
最佳答案

可能是我描述的有问题,我再仔细对比了一下。

是我的 logx 包里的两个 logx.Infologx.Infov 的打印区别。

  • logx.Info 打印的是 string 类型(\u0026 会转为便于阅读的 &)
  • logx.Infov 打印的是 interface 类型,也就是源数据(包含 \u0026
1年前 评论
讨论数量: 5
  1. 可以直接把 3 个字符替换掉
  2. 在序列化的时候,不要转义
    var buf strings.Builder
    enc := json.NewEncoder(buf)
    enc.SetEscapeHTML(false)    // 不转义
    _ = enc.Encode(v)
    jsonStr :=  strings.TrimSuffix(buf.String(), "\n")
  3. 关于打印哪里,你可以看下 log 包是不是对内容进行处理,有些 log 包会把对象进行 json.Marshal 处理
1年前 评论
wonderfate (楼主) 1年前
package main

import (
    "encoding/json"
    "fmt"
    "html"
)

type Person struct {
    Name string
}

func main() {
    p := Person{
        Name: "John & Doe",
    }

    // 把字符串中的特殊字符转义为 HTML 实体
    p.Name = html.HTMLEscapeString(p.Name)

    // 使用 json.Marshal 函数进行编码
    jsonData, err := json.Marshal(p)
    if err != nil {
        fmt.Println("Error: ", err)
        return
    }

    fmt.Println(string(jsonData))
}

输出如下:

{"Name":"John & Doe"}
1年前 评论
wonderfate (楼主) 1年前

可能是我描述的有问题,我再仔细对比了一下。

是我的 logx 包里的两个 logx.Infologx.Infov 的打印区别。

  • logx.Info 打印的是 string 类型(\u0026 会转为便于阅读的 &)
  • logx.Infov 打印的是 interface 类型,也就是源数据(包含 \u0026
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!