在 Golang 中解析转义的 json 字符串

问题描述

假设我有这个 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)

}