2012-04-11 6 views
0

JSONファイルがcsvから変換され、手作業で編集するには大きすぎます。その構文は私が思う一つの大きな配列です。データはルータのグループからのものであり、ルータオブジェクトの構築を目指しています。 JSONファイルへの現在の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:ルータタイプがあることをgauranteedされています互いに

にadjecentこれは有効であるが、ここで私は私が行くと思う構造であるかもしれない:私は目を持つ各ルータのためのオブジェクトを作りたい

[ 
    { 
     "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良いコール、私は次のようになりますと、おそらく後でその質問を聞いてきます:)

+0

は同じルータタイプが互いに隣接することが保証されるように編成ルータはありますか?結果として得られるデータ構造がどのように見えるかを説明することができますか? –

+2

(パースされたjson)配列には、既に多くのオブジェクトのルータがあります。あなたはそれらに何を変えたいですか? – Bergi

+0

ページを読み込んだりリフレッシュするたびにオブジェクトを解析/作成していますか?これらをすべて作成してこれらをキャッシュすれば、おそらくルーターが変更されたときにデータをx回解析する必要はありません。 – Rick

答えて

1

あなたは本当にただその場でオブジェクトを作成することができます。ルーターオブジェクトのセットをハードコードするのはそれ以上高速にはなりません。手書きで間違いを犯す可能性があります。

はこれを見てみましょう:私はあなたがより簡単に操作することができるように、PHPの変数にJSONを回して開始する http://jsfiddle.net/aSbm6/

+0

まさに私がしたいことです。私は私の構造を自分のオブジェクトを飛行中にJSON構造でどうやって欲しくないのか分かりません。 – rd42

+0

@ rd42ルータ名ですばやく検索したいですか?たとえば、 'router [" DWG-350 "]。usage [1] .timestamp' – climbage

+0

exacltyのような特定のタイムスタンプを検索します。私は各ルータによって生成されたスプレッドシートから履歴データを見たいと思っています。 – rd42

1

。あなたのJSONオブジェクトの一つの大きな配列であるように見えますので、それは次のようになります。

その後
$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. 
} 
+0

私はこのプロジェクトはPHPにあるとは思わない? – quodlibetor

+0

良い点 - 私はPHPタグを持っていると思ったが、私は=/ –

+0

ではありませんでした。 – rd42

1

JSON.parse、-ORあなたのライブラリーの同等 - あなたのJSONファイルを指定した場合は、オブジェクトを作成する必要はありませんので、オブジェクトの配列を返します。

私たちは、あなたの例では、JSON文字列dataを呼び出す場合:

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 

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

あなたがしようとしていることは正確にはっきりしていません。

私は、これはあなたがしたいの論理だと思う:

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']); 
} 
+0

@quodliberator私もそれを尋ねる方法がわかりません:)私はそれを要約すると思います。私はJSON構造体からオブジェクトを復元したいと思っています。あなたの答えは有望です。 – rd42

+0

どのような構造にしたいですか?別の言い方をすれば、あなたはルーターのどのような特性を気にしていますか? – quodlibetor

関連する問題