我有一个从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:路由器类型被保证彼此不相干
这可能无效,但这是我认为我想要的结构:
[
{
"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 :(得分:1)
您可以实时创建对象。对一组路由器对象进行硬编码并不会更快,而且你可能会通过手写错误。
答案 1 :(得分: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.
}
答案 2 :(得分: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']);
}