Unmarshal忽略json字符串中的json字符串值,不要尝试解析它

Unmarshal忽略json字符串中的json字符串值,不要尝试解析它,json,string,go,Json,String,Go,我需要解组一个json字符串,但将“SomeString”值视为字符串而不是json。 尝试此操作时,解组器将出错 不确定这是否可行。谢谢 type Test struct{ Name string `json:"Name"` Description string `json:"Description"` SomeString string `json:"SomeString"` } func main() { a := "{\"Name\":\

我需要解组一个json字符串,但将“SomeString”值视为字符串而不是json。 尝试此操作时,解组器将出错 不确定这是否可行。谢谢

type Test struct{
    Name        string `json:"Name"`
    Description string `json:"Description"`
    SomeString  string `json:"SomeString"`
}

func main() {
    a := "{\"Name\":\"Jim\", \"Description\":\"This is a test\", \"SomeString\":\"{\"test\":{\"test\":\"i am a test\"}}\" }"

    var test Test

    err := json.Unmarshal([]byte(a), &test)
    if err !=nil{
        fmt.Println(err)
    }

    fmt.Println(a)

    fmt.Printf("%+v\n", test)
}

您的输入不是有效的JSON。见本部分:

\"SomeString\":\"{\"test
有一个键
SomeString
,它有一个值:
{\
。其假定值内的第二个引号将关闭它。后面的字符
test
不是
SomeString
值的一部分,它们显示为“单独”,但如果它们是下一个属性的名称,则必须将其引用。因此,在对象键:值对之后出现错误
无效字符“t”

当然,可以使用JSON字符串作为值,并且不进行解析,但输入必须是有效的JSON

例如,使用原始字符串文字:

a := `{"Name":"Jim", "Description":"This is a test", "SomeString":"{\"test\":{\"test\":\"i am a test\"}}" }`
使用此输入,输出将是(在上尝试):


这是正常的,您的问题是如何指定输入。
已经是一个解释(Go)文本,您需要在其中包含另一个JSON转义字符串。在这种情况下,您必须转义两次

像这样:

a := "{\"Name\":\"Jim\", \"Description\":\"This is a test\", \"SomeString\":\"{\\\"test\\\":{\\\"test\\\":\\\"i am a test\\\"}}\" }"

这将输出相同的结果,请在上尝试。

好的,谢谢,但是如果我没有用斜杠转义SomeString值的选项怎么办?如果给我一个字符串,比如:=
`{“Name”:“Jim”,“Description”:“这是一个测试”,“SomeString”:“{”测试“{”测试“:“我是一个测试”}}”
`这是按预期工作的,您的问题是如何指定输入。
已经是一个解释(Go)文本,您需要另一个JSON转义字符串。在这种情况下,您必须转义两次!请参阅已编辑的答案。您上面注释中的JSON无效。您不能使用
encoding/JSON
解析无效的JSON字符串,
encoding/JSON
用于解析有效的JSON字符串。“解组器错误”-错误是什么?
a := "{\"Name\":\"Jim\", \"Description\":\"This is a test\", \"SomeString\":\"{\\\"test\\\":{\\\"test\\\":\\\"i am a test\\\"}}\" }"