1

MongoDb からクエリを実行し、JSON の形式でクライアントに渡すことで、さまざまなタイムスタンプで値を渡そうとしています。

次に、クライアントは、php スクリプトによって返された JSON オブジェクトを読み取り、それに基づいてフロート チャートに入力します。

私はこれを行うことができず、次の 2 つの疑問/質問があります。

A. php から返される JSON オブジェクトで、JSON オブジェクトを構築する方法は何ですか?

現在、次のコードから、JSON は次のように生成されています。

[{"1371859200000":65},{"1371860100000":63},{"1371861000000":48},{"1371861900000":47},{"1371862800000":41},{"1371863700000":19},{"1371864600000":35}]

上記は正しいですか?または、データは [["1371859200000":65],["137186​​0100000":63], ....] のようなものである必要があります。

それらの2つの違いは何ですか? (上記では、中括弧の代わりに「[」が使用されています)

B. PHP では、strtotime は int を返します。しかし、JSON オブジェクトをエコーすると、タイムスタンプは "1371859200000" (つまり文字列) のように生成され、1371859200000 (つまり int) ではありません。なんでそうなの ?フロート チャートに入力する必要があります。フロート チャートにデータを入力するには、タイムスタンプが (文字列ではなく) int として存在する必要があります。

以下は私の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
    });
 })
4

1 に答える 1

1

A. [[key: value]]は有効な JavaScript または JSON 構文ではありません。オブジェクトとのキーと値のペア、つまり中括弧構文のみを使用できます。

B.同様に、オブジェクト キーは文字列のみであり、数値ではありません。を持つのは有効な JSON 構文ではありませ{123: "value"}{"123": "value"}

2つの可能な解決策は、

  1. JS 側でキーを数値に変換するだけです。おそらく、それらが常に数値であるという事実に依存することができます
  2. [{"ts": 13456000, "count": 65}]キーは数値にできなくても、値は数値にできるため、データを別の方法で表現します。
于 2013-06-02T18:24:22.940 に答える