假设我有以下这个json字符串:
{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":2,\"E\":\"e\"}
我想将上述字符串转换为结构体:
{
A string
B string
C string
D int
E string
}
我不确定如何做到这一点,因为我已经尝试过引用和取消引用,但似乎还没有成功。
假设我有以下这个json字符串:
{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":2,\"E\":\"e\"}
{
A string
B string
C string
D int
E string
}
我不确定如何做到这一点,因为我已经尝试过引用和取消引用,但似乎还没有成功。
在取消引用之前,将您的输入字符串进行包装,如下所示:
s,err := strconv.Unquote(`"`+yourstring+`"`)
这有点像一个技巧,但如果输入字符串在JSON对象中编码,你可以这样做:
x:=json.RawMessage(`"{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":2,\"E\":\"e\"}"`)
var v string
err:=json.Unmarshal(x,&v)
var x MyStruct
json.Unmarshal([]byte(v),&x)
strconv.Unquote
无法工作(遇到无效语法)时,你可以尝试这个方法。非常感谢。 - jk2Kstrconv
的Unquote
方法,我创建了一个小代码,描述了你的场景如下:package main
import (
"encoding/json"
"fmt"
"strconv"
)
type response struct {
A string
B string
C string
D int
E string
}
func main() {
str := (`"{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":2,\"E\":\"e\"}"`)
fmt.Printf(str)
s, err := strconv.Unquote(str)
fmt.Println()
fmt.Println(s, err)
var resp response
if err := json.Unmarshal([]byte(s), &resp); err != nil {
panic(err)
}
fmt.Println(resp)
}
输出:
"{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":2,\"E\":\"e\"}"
{"A":"a","B":"b","C":"c","D":2,"E":"e"} <nil>
{a b c 2 e}