0

csv から変換された JSON ファイルがあり、大きすぎて手動で編集できません。その構文は、私が思うに1つの大きな配列です。データはルーターのグループからのもので、ルーター オブジェクトを構築することを目指しています。現在の CSV から JSON へのファイルが各行で編成されている方法と、各ルーターを選択し、ルーター名を持つオブジェクト、そのルーターに関連付けられているすべての帯域幅測定値を取得したいと考えています。

これにどのようにアプローチしますか?JSON ファイルを繰り返し処理し、ルーターが変更されたときに、ルーター オブジェクトの新しいインスタンスを開始するときに、これらすべてを処理しようとしています。私はもはや初心者ではなく、学習が遅いだけです。次のステップは、js を使用してルーター クラスを作成し、巨大な JSON 配列から取得したものをクラスに入力することですか、それとも手書きのクラスを使用せずにすべてのオブジェクトをオンザフライで作成することができますか? (オンザフライでオブジェクトを作成できますか。

現在の JSON (各ルーターの csv に数百のエントリがあるページに続きます。

[
   {
        "Router": "RouterID1",
        "TimeStamp": "2012/01/01 06:00:00",
        "transferBytes": "23235",
        "ReceivedBytes":  "29903"
   },
   {
        "Router": "RouterID1",
        "TimeStamp": "2012/01/01 06:05:00",
        "transferBytes": "21235",
        "ReceivedBytes":  "22103"
   }
   {
        "Router": "RouterID2",
        "TimeStamp": "2012/01/01 06:00:00",
        "transferBytes": "23235",
        "ReceivedBytes":  "29903"
   },
   {
        "Router": "RouterID2",
        "TimeStamp": "2012/01/01 06:05:00",
        "transferBytes": "21235",
        "ReceivedBytes":  "22103"
   }
]

@amnotiam: ルーターの種類は互いに隣接していることが保証されています

これは有効ではないかもしれませんが、私が目指していると思う構造は次のとおりです。

[
   {
        "Router": "RouterID1"
        "TimeStamp": array of timestamps
        "transferBytes": array of bytes transferred for each timestamp
        "ReceivedBytes":  array of bytes received for each timestamp
   },
   {
        "Router": "RouterID2",
         "TimeStamp": array of timestamps
        "transferBytes": array of bytes transferred for each timestamp
        "ReceivedBytes":  array of bytes received for each timestamp
   }
]

@Bergiオブジェクトに含まれる履歴データを使用して、ルーターごとにオブジェクトを作成したいと思います。毎回のエントリにオブジェクトがあることを知っています。(おもう)

@Rick良い電話です、私はそうなるでしょうし、おそらく後でその質問をするでしょう:)

4

3 に答える 3

1

より簡単に操作できるように、json を php 変数に変換することから始めます。Json はオブジェクトの 1 つの大きな配列のように見えるため、次のようになります。

$routerArray = json_decode($yourJsonString);

次に、反復してデータを取得できます。

$newRouterObjectsArray = array();

foreach($routerArray as $routerObject) {
    if (empty($newRouterObjectsArray[$Router])) {
        // instantiate new router here:
        $newRouterObjectsArray[$Router] = new Router([params]);
    }
    // any other logic, assuming that the router does exist
}

これを JavaScript で直接実行する場合は、次のようになります。

var routerArray = JSON.parse([yourJsonString]);
var newRouterObjects = {};

for (routerEntry in routerArray) {
    if ('undefined' == typeof newRouterObjects[routerEntry->Router]) {
        //if this router doesn't exist yet, create it
        newRouterObjects[routerEntry->Router] = new Router([params]);
    }
    // update totals, etc.
}
于 2012-04-11T15:01:44.623 に答える
1

JSON.parse-- またはライブラリの同等物 -- JSON ファイルが与えられた場合、 はオブジェクトの配列を返すため、オブジェクトを作成する必要はありません。

data例で JSON 文字列を呼び出すと、次のようになります。

var routers = JSON.parse(data);
routers[0].Router === "DWG-350"; // true
routers[1].TimeStamp === "2012/01/01 06:05:00"; // true

routers[0].Router === routers[1].Router; // true
routers[0].TimeStamp === routers[1].TimeStamp; // false

ロジックやフィルタリングを行う必要がある場合は、すべてのオブジェクトroutersを Javascript オブジェクトとして使用できます。

ただし、何をしようとしているのかは正確には不明です。

これはあなたが望むロジックだと思います:

var routers = JSON.parse(data), // or jQuery.parseJSON()
    aggregate = {};


for (var i = 0, max = routers.length;
     i < max;
     i++) {

     var router = routers[i];
     if (typeof aggregate[routers[i].Router] === 'undefined') {
         aggregate[router['Router']] = {"TimeStamp": [],
                                         "ReceivedBytes": []}
                                         "TransferredBytes": []};

     }

     aggregate[router['Router']]["TimeStamp"]
         .push(router['TimeStamp']);
     aggregate[router['Router']]["ReceivedBytes"]
         .push(router['ReceivedBytes']);
     aggregate[router['Router']]["TransferredBytes"]
         .push(router['TransferredBytes']);
 }
于 2012-04-11T15:09:40.210 に答える
1

実際にその場でオブジェクトを作成できます。一連のルーター オブジェクトをハードコーディングしても、それほど速くはなりません。また、手書きで間違いを犯す可能性があります。

これを見てください:http://jsfiddle.net/aSbm6/

于 2012-04-11T14:51:14.483 に答える