问题描述
假设我有这个 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)
,
您可以按照 mfathirirhas 的建议使用 const newData={...,version:11}
const data=await modal.findOne({...})
Object.assign(data,newData)
data.dataValues.version=11 // this line will help u fix this bug
await data.save()
的 Unquote
方法,我创建了一个小代码来描述您的场景,如下所示:
strconv
输出:
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\",\"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)
}