json_encode(string)给出反斜杠的反斜杠

时间:2016-05-05 14:38:58

标签: php json

我在js中创建了一个对象数组,并在对字符串进行字符串化后将其发送到我的一个控制器。

   var arr = new Array();

                for(i=0;i<noOfDeals;i++){

                var deals = {'percentageMin':document.getElementById("pmin"+i).value,
                               'percentageMax':document.getElementById("pmax"+i).value,
                                'modelApplicable': document.getElementById("model"+i).value,
                                'maxCashback' : document.getElementById("maxcash"+i).value,
                                'dealId' : document.getElementById("deal"+i).value                              
                };
                arr.push(deals);
                }
                alert(JSON.stringify(arr));

                 $.ajax({method:'get',url:'abc?data='+JSON.stringify(arr),success:function(response) {
                        //response = JSON.parse(response);
                         response = JSON.parse(response);
                        alert(response.body);
                         response = JSON.parse(response.body);
                        if(response.status != undefined && response.status == 'SUCCESS') {
                                alert('Merchant details updated successfully. Refresh the page to see the changes.');
                        }
                        else {
                                alert('Could not update merchant details, Some Error Occurred');
                        }
                }});

在我的控制器中,我正在编码数据,然后发送命中API:

public function updateselectedmerchants(){
                if (isset($_GET['data'])) {

                        $str_data = $_GET['data'];

                        print_r(json_encode(array('deals' => $str_data)));

                        die;
                }
        }

输出:

{"deals":"[{\"percentageMin\":\"1.00\",\"perentageMax\":\"0.00\",\"modelApplicable\":\"3\",\"maxCashback\":\"30.00\",\"dealId\":\"7\"}"}

所需的输出:

{"deals":[{\"percentageMin\":\"1.00\",\"perentageMax\":\"0.00\",\"modelApplicable\":\"3\",\"maxCashback\":\"30.00\",\"dealId\":\"7\"}]}

输出中有三件不需要的东西:

1) The double quotes before the first square brackets should not be there.
2) The ending square bracket is not present
3) "/" appearing

请帮助我。

2 个答案:

答案 0 :(得分:2)

你应该做

$str_data = json_decode($_GET['data'], true);
print_r(json_encode(array('deals' => $str_data)));

否则$str_data仍然是一个字符串,并且将按照JSON编码,而看起来您希望它是一个PHP数组结构,然后再将所有这些编码为有效的JSON。

请参阅此PHP 'fiddle'

答案 1 :(得分:0)

你可能会生成&#34;或者&#39;在某个你不想要的地方。

不确定它是否100%有效,但请尝试:

public function updateselectedmerchants(){
                if (isset($_GET['data'])) {

                        $str_data = json_decode($_GET['data']);

                        print_r(json_encode(array('deals' => $str_data)));

                        die;
                }
        }

你应该尝试PHP方法:

http://php.net/manual/en/function.urlencode.php

http://php.net/manual/en/function.urldecode.php

只需解码数组并在另一侧对其进行编码。