2012-04-11 355 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