json_encode php 5.5 vs 5.3与js玩得不好

时间:2014-08-27 20:05:58

标签: javascript php expressionengine

问题在于:

$locArr是一个庞大的数组

然后将该信息拉入js我使用

var oLocations = <?= json_encode($locArr, JSON_FORCE_OBJECT) ?>;

oLocations = json_encode($locArr);

生成的代码
var oLocations = $.parseJSON( ,"LastDataBuild":"","Drop24Hour":"NO","Pickup24Hour":"NO","MileageUnit":"MI","AirportIndicator":"0",...

注意第一个逗号,抛出

Uncaught SyntaxError: Unexpected token ,

如果我用引号包装所有内容,以便它计算为我得到的字符串

Uncaught SyntaxError: Unexpected token : 

我已经在javascript内外尝试了json_encoding,但似乎没有用。

关于所有这一切最困难的部分是在PHP 5.5我可以使用:

json_encode($locArr, JSON_PRETTY_TEXT | JSON_FORCE_OBJECT );

一切正常。控制台将输出一个漂亮的OBJECT而不是一个字符串,没有任何错误。

有没有其他人经历过这个或者您对我可以尝试的其他事情有任何想法吗?

下面是我的代码的当前状态(我一次可以互换地添加/删除几行代码):

在PHP中声明var:

    $oLocations = json_encode($locArr, JSON_FORCE_OBJECT);

JS试图使用数组:

var oLocations = JSON.parse(<?= $oLocations ; ?>);
        // while(oLocations.charAt(0) !== '"'){
        //  oLocations = oLocations.substr(1);
        // };
        // oLocations = '{' + oLocations;
        // oLocations = $.parseJSON(oLocations);
        // oLocations = JSON.parse(oLocations);
        // console.log(oLocations);
        // oLocations = $.parseJSON(oLocations);

对于这个例子,JS抛出了这个"Uncaught SyntaxError: Unexpected token o ",这是它引用的代码:

var oLocations = $.parseJSON([{"RentalLocationID":"KBR","RentalLocationStatus":"Active","RentalLocationType":"Corporate","RentalLocationName":"KBR HOURS M-F 730-6 SAT 9-1 SUN 10-2","AddressLine1":"8555 JOHN CARPENTER FWY","AddressLine2":"","Latitude":"0","Longitude":"0","AddressCity":"DALLAS","AddressState":"TX","AddressStateName":"TEXAS","AddressZipCode":"75247","AddressCountry":"US","AddressCountryName":"UNITED STATES","PhoneNumber":"214-630-6555","AltPhoneNumber":"","FAXNumber":"","ConfirmMessage":["","","",""], ...

2 个答案:

答案 0 :(得分:1)

当数组嵌套127+级别时,json_encode存在问题。

如果你真的在处理一个巨大的数组,那可能就是它。

http://us2.php.net/json_decode#refsect1-function.json-decode-returnvalues

编辑:同样奇怪的是你没有回显出最初的json_encode,并且它会给你结果。

答案 1 :(得分:0)

所以问题不在我的PHP或JS中。它在Expressionengine里面。它正在拿起“{”并尝试使用EE代码来解释它。最后,我们最终使用了Pretty Print替代函数,该函数为键和值的每一行配对添加了中断。