我试图通过从MongoDb查询传递不同时间戳的值,然后以JSON的形式将它们传递给客户端。
然后客户端将读取php脚本返回的JSON对象,并在此基础上填充flot图表。
我无法做到这一点,并且有以下两个疑问/问题:
A。 在php返回的JSON对象中,构造JSON对象的方式应该是什么?
目前,从以下代码中可以看出JSON的生成方式如下:
[{"1371859200000":65},{"1371860100000":63},{"1371861000000":48},{"1371861900000":47},{"1371862800000":41},{"1371863700000":19},{"1371864600000":35}]
以上是对的吗? 或者数据应该是这样的:[[“1371859200000”:65],[“1371860100000”:63],....]
他们两个有什么区别? (在上面的'['代替花括号)
B。 在PHP中,strtotime返回int。但是,当我回显我的JSON对象时,时间戳产生类似于“1371859200000”(即字符串)而不是1371859200000(即int)。为什么这样 ? 我必须填充flot图表,并且时间戳必须以int(而不是字符串)形式存在才能填充flot图表。
以下是我的PHP代码(不是整个代码):
$date = 2;
$tsc = 15;
$result = array();
for ($hour = 0; $hour < 24; $hour++) {
for ($min_lower = 0; $min_lower <= 60-$tsc; $min_lower += $tsc) {
// Query MongoDB.
$query = array( "date" => $date, "hour" => $hour, "minutes" => array( '$gte' => $min_lower, "\$lt" => $min_lower+$tsc ) );
$count = $coll->find($query)->count();
$time = strtotime("2013-06-".strval($date)." ".strval($hour).":".strval($min_lower).":".strval(0)." UTC") * 1000;
$data = array($time => $count);
// Push this smaller array into the main array. Is this the correct way ?
array_push($result, $data);
}
}
echo json_encode($result);
以下是我的javascript / jquery代码:
var options = {
lines: {
show: true
},
points: {
show: true
},
xaxis: {
mode : "time",
timeformat: "%m/%d/%y"
}
};
$("button.fetch").click(function () {
var button = $(this);
var dataurl = "MY URL";// Here the URL comes.
function onDataReceived(series) {
data.push(series);
$.plot("#placeholder", series, options);
}
$.ajax({
url: dataurl,
type: "GET",
dataType: "json",
success: onDataReceived
});
})
答案 0 :(得分:1)
A。 [[key: value]]
不是有效的JavaScript或JSON语法。您只能使用对象的键值对,即大括号语法。
B。同样,对象键只能是字符串,而不是数字。拥有{123: "value"}
的JSON语法无效,必须为{"123": "value"}
。
两种可能的解决方案是
[{"ts": 13456000, "count": 65}]
,因为即使键不能,值也可以是数字。