发布未转义的JSON数组

时间:2012-11-05 14:29:33

标签: jquery json

我正在尝试发布一些由PHP处理的JSON数据。 当它到达服务器端时,数据被转义,我无法可靠地解除它。

    var jsondata = '{"name":"Foo","email":"name@address.com"},{"name":"Bar","email":"name@address.com"}';
    $.ajax({
        type: "POST",
        url: "save.php",
        dataType: "json",
        processData: false,
        data: { json: '['+jsondata+']'},
    });

$_POST['json']然后包含:

[{\"name\":\"Foo\",\"email\":\"name@address.com\"},{\"name\":\"Foo\",\"email\":\"name@address.com\"}]

如何发送未编码的JSON后期数据?我认为processData: false会涵盖这一点。


说明错误服务器端:

<?php

$_POST['json-bad'] = '[{\"name\":\"Foo\",\"email\":\"name@address.com\"},{\"name\":\"Foo\",\"email\":\"name@address.com\"}]';
$data_bad = json_decode($_POST['json-bad']);
var_dump($data_bad); // returns "NULL"

$_POST['json-good'] = '[{"name":"Foo","email":"name@address.com"},{"name":"Bar","email":"name@address.com"}]';
$data_good = json_decode($_POST['json-good']);
var_dump($data_good); // returns array as expected

?>

3 个答案:

答案 0 :(得分:0)

你不能只使用json_decode吗?

答案 1 :(得分:0)

如果您的数据来自表单,您将需要使用下面的一些代码,如果不是全部的话。这段代码采用了一个jquery表单对象,并以适当的方式stringify,您可以轻松地执行类似

的操作
$json = json_decode($_POST['json'], true); 
echo $json['email'];

这是JS

$.ajax({
    type: "POST",
    url: "save.php",
    dataType: "json", //NOTE: indicates data type being RETURNED, not PASSED
    processData: false,
    data: { json: getJson( $('#formId') )} //NOTE: REMOVE THIS EXTRA COMMA
});


function getJson(o){
    return (JSON.stringify(o.serializeObject()));   
}
$.fn.serializeObject = function(){
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};  

注意:较旧的浏览器要求您在此处找到json2.js库:http://www.crockford.com/javascript/jsmin.html

答案 2 :(得分:0)

JSON(JavaScript Object Notation)只是以javascript格式表达对象的方式。

我的印象是您只需要将对象从javascript传递到您的服务器。

在这种情况下,您不需要进行任何特定操作

persons = {"name":"Foo","email":"name@address.com"},{"name":"Bar","email":"name@address.com"};
$.ajax({
    type: "POST",
    url: "save.php",
    dataType: "json",
    processData: false,
    data: {'persons': persons},
});

在服务器端

echo $_POST['persons'][0]['name'];

你会得到

Foo

这不是你想要做的吗?