自动将json处理为具有不同结构的对象 [英] Manipulate json into an object with a different structure automatically

查看:97
本文介绍了自动将json处理为具有不同结构的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个巨大的JSON文件.它的结构不正确,我无法控制该结构.它是基于时间戳来自一组路由器的数据.我正在尝试创建一个对象结构,该结构将给定路由器的所有信息组合成带有时间戳记等的路由器对象作为数组. @quodlibetor是使我接近这一点的巨大帮助.我还想从json中的名称val对的名称自动命名对象的属性.

I have a huge JSON file. It's not in the correct structure and I have no control over the structure. It is data coming from a group of routers based on timestamp. I'm trying to create an object structure that combines all the info for a given router into a router object with timestamp etc. as arrays. @quodlibetor was a big help getting me close to this. I also want to automatically name the properties of the object from the name of the name val pairs in the json.

我的目的是根据json文件中的名称自动命名属性,并将其重组为一个看起来像这样的对象(我对结构的建议持开放态度,这似乎是最有组织性的方法).

My aim is to autoname the properties from the names in the json file and to restructure it into an object that looks like this (I'm open to suggestions on the structure this just seemed the most organized way to do it).

这是我想要的结构:

    {
        "Router": [
            {
                "routerName": "RouterID1",
                "TimeStamp": [
                    "2012/01/01 06:00:00",
                    "2013/01/01 06:00:00",
                    "2014/01/01 06:00:00"
                ],
                "OutputBITS": [
                    "23235",
                    "29903",
                    "22103"
                ],
                "InputBITS": [
                    "23235",
                    "29903",
                    "22103"
                ]
            }
        ]
    }

尽管试图创建该结构,但我正在接近,但没有达成协议:

Although trying to create that structure I'm getting close but no deal:

{
    "RouterID1": {
        "timeStamp": [
            {
                "timeStamp": "2012/01/01 06:00:00"
            },
            {
                "timeStamp": "2013/01/01 06:00:00"
            },
            {
                "timeStamp": "2014/01/01 06:00:00"
            }
        ],
        "OutputBITS": [
            {
                "OutputBITS": "23235"
            },
            {
                "OutputBITS": "23235"
            },
            {
                "OutputBITS": "23235"
            }
        ],
        "InputBITS": [
            {
                "InputBITS": "29903"
            },
            {
                "InputBITS": "29903"
            },
            {
                "InputBITS": "29903"
            }
        ]
    }
}

原始JSON:

json = [
         {
              "Router": "RouterID1",
              "TimeStamp": "2012/01/01 06:00:00",
              "OutputBITS": "23235",
              "InputBITS":  "29903"
         },   
          {
              "Router": "RouterID1",
              "TimeStamp": "2013/01/01 06:00:00",
              "OutputBITS": "23235",
              "InputBITS":  "29903"
         },   
          {
              "Router": "RouterID1",
              "TimeStamp": "2014/01/01 06:00:00",
              "OutputBITS": "23235",
              "InputBITS":  "29903"
         },
         {
              "Router": "RouterID3",
              "TimeStamp": "2012/01/01 06:05:00",
              "OutputBITS": "21235",
              "InputBITS":  "22103"
         },
         {
             "Router": "RouterID3",
             "TimeStamp": "2012/01/01 06:05:00",
             "OutputBITS": "21235",
             "InputBITS":  "22103"
        },
        {
            "Router": "RouterID4",
            "TimeStamp": "2012/01/01 06:05:00",
            "OutputBITS": "21235",
            "InputBITS":  "22103"
       },
       {
           "Router": "RouterID4",
           "TimeStamp": "2012/01/01 06:05:00",
           "OutputBITS": "21235",
           "InputBITS":  "22103"
      }
      ];  

代码:

    //  Create routers object    
    var routers = {};


       for (var i=0;i<json.length;i++){
        var router_name = json[i].Router;
        router_name = (router_name.replace(/-/g, ""));  //take hyphen out or router name

        if (!routers[router_name]){
            // add properties to the router object thanks to @@quodlibetor

            // instead of using timeStamp is something like json[i] or json.[name] or some
            // way to reference each json property and not have to type it in?

            routers[router_name] = { timeStamp : [], OutputBITS : [], InputBITS : [] };
        }

                routers[router_name].timeStamp.push({
                    timeStamp : json[i].TimeStamp
                }); 
                 routers[router_name].OutputBITS.push({
                     OutputBITS : json[i].OutputBITS
                }); 
                routers[router_name].InputBITS.push({
                    InputBITS : json[i].InputBITS
                });  
    }; 

    console.log(routers);
    });
     </script>

推荐答案

这是您需要的代码:

var router = {router: []}, i, j, k, l, inArray, routerName, thisRouter;

for(i=0,j=json.length;i<j;++i) {
    inArray = false;

    routerName = json[i].Router;

    for(k=0,l=router.router.length;k<l;++k) {
        if(router.router[k].name === routerName) {
            inArray = true; --k; l = k;
        }
    }

    if(inArray === true) {
        router.router[k].TimeStamp.push(json[i].TimeStamp);
        router.router[k].OutputBITS.push(json[i].OutputBITS);
        router.router[k].InputBITS.push(json[i].InputBITS);
    } else {
        thisRouter = {name: routerName, TimeStamp: [json[i].TimeStamp], OutputBITS: [json[i].OutputBITS], InputBITS: [json[i].InputBITS]};

        router.router.push(thisRouter);
    }
}

console.log(router);

这篇关于自动将json处理为具有不同结构的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆