[英]json.Unmarshal Ignore json string value inside a json string, dont attempt to parse it
我需要解组 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
值的一部分,它们显示为“单独”,但如果它们是下一个属性的名称,则必须引用它。 所以你invalid character 't' after object key:value pair
。
当然可以有一个 JSON 字符串作为值并且它没有被解析,但是输入必须是有效的 JSON。
例如,使用原始字符串文字:
a := `{"Name":"Jim", "Description":"This is a test", "SomeString":"{\"test\":{\"test\":\"i am a test\"}}" }`
使用此输入,output 将是(在Go Playground上尝试):
{"Name":"Jim", "Description":"This is a test", "SomeString":"{\"test\":{\"test\":\"i am a test\"}}" }
{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\\\"}}\" }"
这将与 output 相同,在Go Playground上尝试一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.