我已经使用json_encode了很长时间,到目前为止我没有任何问题.现在我正在使用上传脚本,我尝试在文件上传后返回一些JSON数据.
我有以下代码:
print_r($result); // <-- This is an associative array
echo json_encode($result); // <-- this returns valid JSON
Run Code Online (Sandbox Code Playgroud)
这给了我以下结果:
// print_r result
Array
(
[logo_url] => http://mysite.com/uploads/gallery/7f/3b/f65ab8165d_logo.jpeg
[img_id] => 54
[feedback] => Array
(
[message] => File uploaded
[success] => 1
)
)
// Echo result
{"logo_url":"http:\/\/mysite.com\/uploads\/gallery\/7f\/3b\/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么json_encode添加斜线?
更新
@Quentin说,事情是发生之间json_encode以及.parseJSON和他是对的.
做一个alert(data.toSource());给我下垂的结果:
({response:"{\"logo_url\":\"http:\\/\\/storelocator.com\\/wp-content\\/uploads\\/gallery\\/7f\\/3b\\/71b9520cfc91a90afbdbbfc9d2b2239b_logo.jpeg\",\"img_id\":\"62\",\"feedback\":{\"message\":\"File uploaded\",\"success\":true}}", status:200})
Run Code Online (Sandbox Code Playgroud)
这不是有效的JSON.它还添加了status:200,我不知道它来自何处.
可能是Plupload bind我的返回数据做了什么?
这是我的js脚本:
uploader.bind('FileUploaded', function(up, file, data) {
alert(data.toSource());
$('#' + file.id + " b").html("100%");
});
Run Code Online (Sandbox Code Playgroud)
小智 66
只需使用"JSON_UNESCAPED_SLASHES"选项(在5.4版之后添加).
json_encode($array,JSON_UNESCAPED_SLASHES);
Run Code Online (Sandbox Code Playgroud)
Mee*_*Din 29
我刚刚在我的一些脚本中遇到过这个问题,而且似乎正在发生,因为我将json_encode应用于另一个数组中的数组,该数组也是json编码的.如果在创建数据的脚本中有多个foreach循环,则很容易做到.始终在最后应用json_encode.
这是发生了什么.如果你这样做:
$data[] = json_encode(['test' => 'one', 'test' => '2']);
$data[] = json_encode(['test' => 'two', 'test' => 'four']);
echo json_encode($data);
Run Code Online (Sandbox Code Playgroud)
结果是:
["{\"test\":\"2\"}","{\"test\":\"four\"}"]
Run Code Online (Sandbox Code Playgroud)
那么,你真正需要做的是:
$data[] = ['test' => 'one', 'test' => '2'];
$data[] = ['test' => 'two', 'test' => 'four'];
echo json_encode($data);
Run Code Online (Sandbox Code Playgroud)
这将回归
[{"test":"2"},{"test":"four"}]
Run Code Online (Sandbox Code Playgroud)