json - 相当于Python的json.dumps和json.loads

标签 json string go marshalling unmarshalling

这是一个非常奇怪的情况,但是我需要将一个字符串化的json转换为我可以解码的有效内容:

"{\"hello\": \"hi\"}"

我希望能够将其解编成这样的结构:
type mystruct struct {
    Hello string `json:"hello,string"`
}

我知道通常unmarshall占用字节,但是我试图将当前获取的内容转换为结构化的内容。
有什么建议?

最佳答案

问题在于encoding/json包接受格式正确的JSON,在这种情况下,您已经对引号进行了转义的初始JSON,首先必须取消转义引号,一种方法是使用the strconv.Unquote function,这是一个示例代码段:

package main

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

type mystruct struct {
    Hello string `json:"hello,omitempty"`
}

func main() {
    var rawJSON []byte = []byte(`"{\"hello\": \"hi\"}"`)

    s, _ := strconv.Unquote(string(rawJSON))

    var val mystruct
    if err := json.Unmarshal([]byte(s), &val); err != nil {
        // handle error
    }

    fmt.Println(s)
    fmt.Println(err)
    fmt.Println(val.Hello)
}

关于json - 相当于Python的json.dumps和json.loads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61943991/

相关文章:

json - 如何从 Titanium 中的 JSON 字符串中转义 "\"?

java - 线程 "main"javax.xml.bind.PropertyException : name: eclipselink. 媒体类型值中的异常:application/json

iphone - iPhone 的 JSON 库

c - 分割字符串并转换为 Int

c++ - string 自动将 const char* 转换为 std::string

http - 在 Golang 中没有缓冲 http.ResponseWritter

Go模块替换为本地模块的特定版本

json - Postgres 函数返回一行作为 JSON 值

java - 如何计算数组中字符串值中的字符数,然后将其与其他值进行比较以找到最长的字符?

go - 本地运行 Go Tour 时出错 : Couldn't find tour files: could not find go-tour content; check $GOROOT and $GOPATH