我的代码如下
foreach($location_total_n_4 as $u=> $v) {
$final_location_total_4 .= "[".$u.",".$v."],";
}
我将这些值作为JSON发送。
echo json_encode(array("location"=>"$final_location_total_4" ));
以下是response
对象的外观:
{
"location": "[1407110400000,6641],[1407196800000,1566],[1407283200000,3614],"
}
我正在用ajax创建成功图表。所以我需要这样,
{
"location": [1407110400000,6641],[1407196800000,1566],[1407283200000,3614],
}
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
问题是您的location
值是非正确序列化的值。它绝对适合修复服务器端(看起来像是试图实现自己的json_encode并失败),但它也可以修复客户端。一种可能的方法:
var location = JSON.parse('[' + response.location.slice(0,-1) + ']');
Demo。 slice(0,-1)
删除尾随逗号,然后将内容包装到括号中,将它们转换为适当的JSON(至少对于给定的数据集)。
至于服务器端,原来我是对的:这段代码......
foreach($location_total_n_4 as $u=> $v) {
$final_location_total_4 .= "[".$u.",".$v."],";
}
echo json_encode(array('location' => "$final_location_total_4"));
...在战术上(总是添加一个尾随的逗号)和战略上是错误的(一个人不应该解决语言本身已经解决的任务)。一个可能的替代品:
$locations = array();
foreach ($location_total_n_4 as $u => $v) {
$locations[] = array($u, $v);
}
echo json_encode(array('location' => $locations));
底线:永远不要尝试实施自己的序列化协议,除非您真的知道自己在做什么。
答案 1 :(得分:0)
最后有一个逗号(,),所以json.parse会抛出错误,所以我们需要删除它。
b = JSON.parse("["+ data[0].substr(0,data[0].length-1) +"]");
然后b成为
[[1407110400000,6641],[1407196800000,1566],[1407283200000,3614],[1407369600000,3654],[1407456000000,2918],[1407715200000,3900]]
没有逗号。