2012-04-11 506 views
0

我有一個從csv轉換而來的JSON文件太大而無法編輯。它的語法是我認爲的一個大陣列。數據來自一組路由器,我的目標是構建路由器對象。當前CSV到JSON文件的方式由每行組織,我想挑選出每個路由器並使用路由器名稱的對象,以及與該路由器相關的所有帶寬度量。將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

進行組織,以便在同一路由器類型的保證是彼此相鄰路由器?你能舉出一個結果數據結構應該是什麼樣子的例子嗎? – 2012-04-11 14:46:16

+2

你的(解析的json)數組中的路由器已經有了很多對象。你想要改變他們什麼? – Bergi 2012-04-11 14:46:19

+0

每次頁面加載或刷新時你都會解析/製作對象嗎?創建所有這些和緩存這些可能會更好,因此您不必在路由器更改時解析數據x次數。 – Rick 2012-04-11 14:47:51

回答

1

可以真的只是動態創建的對象。硬編碼一組路由器對象不會更快,並且很可能你會通過手寫來犯錯誤。

看看這個:http://jsfiddle.net/aSbm6/

+0

正是我想要做的。我只是我不確定如何讓我的結構以我不想要的JSON結構飛行。 – rd42 2012-04-11 15:10:39

+0

@ rd42你想通過路由器名稱快速查找嗎?例如,你會查找一個特定的時間戳,比如'routers [「DWG-350」]。usage [1] .timestamp' – climbage 2012-04-11 15:18:29

+0

exaclty。我想查看每個路由器生成的電子表格中的歷史數據。 – rd42 2012-04-11 15:24:50

1

我會打開JSON到一個PHP變量,這樣就可以在其上更容易操作開始。它看起來像你的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 2012-04-11 15:02:29

+0

好點 - 我以爲我有PHP標籤,但我沒有=/ – 2012-04-11 15:03:28

+0

沒關係,它仍然可以幫助。 – rd42 2012-04-11 15:09:19

1

JSON.parse圖書館的等效--or - 如果給你的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']); 
} 
+0

@quodliberator我不清楚如何去問它:)我想總結一下。我想從我正在閱讀的JSON結構重新構建對象。您的答案看起來很有希望。 – rd42 2012-04-11 15:12:43

+0

你想讓他們擁有什麼樣的結構?換句話說:你關心哪些路由器屬性? – quodlibetor 2012-04-11 15:16:08