为什么json_encode添加反斜杠?

2022-08-30 09:22:45

我已经使用了很长时间,到目前为止我还没有遇到任何问题。现在我正在使用上传脚本,并尝试在文件上传后返回一些JSON数据。json_encode

我有以下代码:

print_r($result); // <-- This is an associative array
echo json_encode($result); // <-- this returns valid JSON

这给了我以下结果:

// 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}}

谁能告诉我为什么要添加斜杠?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})

这不是有效的 JSON。它还增加了,我不知道这是从哪里来的。status:200

可能是 对我返回的数据做了什么吗?Plupload bind

这是我的js脚本:

  uploader.bind('FileUploaded', function(up, file, data) {
    alert(data.toSource());
    $('#' + file.id + " b").html("100%");
  });

答案 1

只需使用“JSON_UNESCAPED_SLASHES”选项(在版本5.4之后添加)。

json_encode($array,JSON_UNESCAPED_SLASHES);

答案 2

我刚刚在我的一些脚本中也遇到了这个问题,它似乎正在发生,因为我正在将json_encode应用于包裹在另一个数组中的数组,该数组也是json编码的。如果在创建数据的脚本中有多个 foreach 循环,则很容易做到。始终在最后应用json_encode。

这是正在发生的事情。如果您这样做:

$data[] = json_encode(['test' => 'one', 'test' => '2']);
$data[] = json_encode(['test' => 'two', 'test' => 'four']);
echo json_encode($data);

结果是:

["{\"test\":\"2\"}","{\"test\":\"four\"}"]

因此,您实际需要做的是:

$data[] = ['test' => 'one', 'test' => '2'];
$data[] = ['test' => 'two', 'test' => 'four'];
echo json_encode($data);

这将返回

[{"test":"2"},{"test":"four"}]

推荐