我有以下两组需要解码的代码。
$test =
'{
"username":"sophia",
"event":{
"failure":"unreset",
"answers":{
"question1":"{\"answer\":\"{\\\"pass\\\":true,\\\"mark\\\":9,\\\"totalmark\\\":9,\\\"value\\\":\\\"get full attention|establish classroom rules|teach key words & concepts|use visual aids|demonstrate|check understanding|introduce point system|give handouts|play\\\"}\",\"state\":\"{\\\"result\\\":{\\\"pass\\\":true,\\\"mark\\\":9,\\\"totalmark\\\":9,\\\"value\\\":\\\"get full attention|establish classroom rules|teach key words & concepts|use visual aids|demonstrate|check understanding|introduce point system|give handouts|play\\\"}}\"}"
}
},
"event_source":"server"
}';
首先,尽管它是有效的,但我无法完全解码第一个内容。似乎“question1”部分被加密两次,我不知道出了什么问题。
$test =
'{
"username":"lon",
"event":{
"saved_response":"{\"parts\": [{\"text\": \"Passion for teaching means loving your job. Doing with all your heart. Teachers who are passionate can inspire pupils to love learning. Passionate teachers create an effective learning environment and increase learning potential of\\nstudents.\"}]}"
},
"event_source":"server"
}';
$jarray = json_decode($test, true);
$jevent = json_decode($jarray['event']['saved_response'], true);
对于第二个错误,我可以解码一次,但是
var_dump($jevent)
的输出为NULL。有人可以友好地解释一下为什么会出现这两个错误吗?我已经查看了如何处理PHP中JSON字符串中的反斜杠,但现在我真的很困惑。谢谢。
$test
字符串在解析为 JSON 时无效。但如果它被视为字面文本(例如从文件或网络操作中读取),它是有效的 JSON。你在哪里以及如何接收到这个字符串?(区别在于反斜杠:你需要在$test
字符串文字中对它们进行转义)。 - T.J. Crowder'
字符之间,则不会创建包含该文本的字符串。例如,文本testing\fun
中包含一个反斜杠。如果你将它粘贴到一个字符串文字 ('testing\fun'
) 中,则生成的字符串不会包含反斜杠(它包含了一个回车换行符,因为反斜杠后面加上了转义序列\f
)。要将原始文本转换成字符串文字,必须复制所有反斜杠。文本testing\fun
变成了字符串文字'testing\\fun'
。 - T.J. Crowderquestion1
被双重编码,但更糟糕的是其中两个属性(answer
和state
)也被双重编码(总共四重编码)。 - T.J. Crowder