Php JSON在解码时编码数组和意外的令牌错误

时间:2017-12-07 10:42:11

标签: javascript php json

我从SQL查询中获取了一个数组,对其进行了编码,当我在javascript中解码时,我收到了错误

  

在位置0的JSON中出现意外的令牌

编码前的数组的var_dump

array(1) { [0]=> array(10) { ["order_id"]=> string(10) "1512642144" 
["order_erp_id"]=> string(1) "0" ["order_type"]=> string(3) "web" 
["order_date"]=> string(23) "2017-12-07 11:22:24.263" ["order_total"]=> 
string(4) "0.00" ["order_desc1"]=> string(3) "web" ["order_desc2"]=> 
string(4) "test" ["no_items"]=> string(1) "0" ["order_count"]=> int(1) 
["item_arr"]=> string(0) "" } } 
[{"order_id":"1512642144","order_erp_id":"0","order_type":"web",
"order_date":"2017-12-07 11:22:24.263","order_total":"0.00",  
"order_desc1":"web","order_desc2":"test","no_items":"0",
"order_count":1,"item_arr":""}]

然后我编码并发送:

echo json_encode($order_item_arr);

在客户端,我收到数据,在解码步骤之前,我从javascript中的console.log(data);获得了这个数据:

array(1) {
[0]=>
array(10) {
["order_id"]=>
string(10) "1512642144"
["order_erp_id"]=>
string(1) "0"
["order_type"]=>
string(3) "web"
["order_date"]=>
string(23) "2017-12-07 11:22:24.263"
["order_total"]=>
string(4) "0.00"
["order_desc1"]=>
string(3) "web"
["order_desc2"]=>
string(4) "test"
["no_items"]=>
string(1) "0"
["order_count"]=>
int(1)
["item_arr"]=>
string(0) ""
  }
}


[{"order_id":"1512642144","order_erp_id":"0","order_type":"web",
"order_date":"2017-12-07 11:22:24.263","order_total":"0.00",  
"order_desc1":"web","order_desc2":"test","no_items":"0", 
"order_count":1,"item_arr":""}]

所以它看起来很好,当我用JSON.parse(data);解码时我有错误:

VM414:1 Uncaught SyntaxError: Unexpected token a in JSON at position 0   

3 个答案:

答案 0 :(得分:2)

  

Uncaught SyntaxError:位于0的JSON中的意外标记a

因此,“JSON”中的第一个字符是a,它不能是有效的JSON。并且您的echo json_encode($order_item_arr);行不会输出它。

  

编码前的数组的var_dump:

array(1) { [0]=> array

...而且有你的问题。您可以看到第一个字符是a

您正在尝试将var_dump解析为JSON。

不要那样做。改为解析JSON。

答案 1 :(得分:2)

不要在PHP页面上输出var_dump,它会使该页面上的json无效。删除var_dump(),错误将消失。

正如您所见:

  

在位置0的JSON中出现意外的令牌

由于array(1) {导致错误,这不是有效的json。并且打破了整个json数据。

所以,只需删除var_dump()即可。

看看这个:

array(1) {
[0]=>
array(10) {
["order_id"]=>
string(10) "1512642144"
["order_erp_id"]=>
string(1) "0"
["order_type"]=>
string(3) "web"
["order_date"]=>
string(23) "2017-12-07 11:22:24.263"
["order_total"]=>
string(4) "0.00"
["order_desc1"]=>
string(3) "web"
["order_desc2"]=>
string(4) "test"
["no_items"]=>
string(1) "0"
["order_count"]=>
int(1)
["item_arr"]=>
string(0) ""
  }
}

删除var_dump()将删除上面的部分,并且只留下下面的字符串,这是有效的json。

[{"order_id":"1512642144","order_erp_id":"0","order_type":"web",
"order_date":"2017-12-07 11:22:24.263","order_total":"0.00",  
"order_desc1":"web","order_desc2":"test","no_items":"0", 
"order_count":1,"item_arr":""}]

答案 2 :(得分:0)

JSON.parse()用于将包含JSON表示法的字符串转换为Javascript对象。

您的代码将对象转换为字符串(通过调用.toString())以尝试将其解析为JSON文本。 默认的.toString()返回" [object Object]",这是无效的JSON;因此错误