将非常规Json字符串转换为常用的json对象

如下所示,这是一个已经转换为Json对象的非常规Json字符串,原来是一个Json类型的字符串,在转换为Json对象时,查询资料发现有两种转换法,.parse()和.eval()方法,但是前辈们都极其不推荐使用后者,因为它不会检查Json格式的正确与否,还能将可执行的代码直接执行了,是极其危险的。而前者当数据不符合Json字符串格式时,会报错提示!!详解的可以搜其他大神的笔记查看。
下面的各个字段没有像我们直接能使用的key-value键值对这样一一对应的json对象。各key值意义如下:
Count:表示数据有一行;
Field:此数组元素为我们所需要的真正key值;
Row:数据数组,根据Count值而定,如果Count:n,则有n个Row(即有n行),
其中Type是表明数据类型,后面第二个关键字相当于数据类型名,其值为真正的key值所对应的value值。
最后解析之后,我们想要的应该是: {channel:1,on_off:1,freq:”1950.0000MHz”,sweep:”10.0000MHz”}

{ 
  Count:1,
  Field:["channel","on_off","freq","sweep"],
  Row:[
      {
     VolVal:[
     {Type:6,iVal:1},
     {Type:7,dwVal:1},
     {Type:10,strVal:"1950.0000MHz"},
     {Type:10,strVal:"10.0000MHz"}
     ]    
      }
  ]
}

看到这个的时候还是有点蒙圈的,感觉解析出来还麻烦甚至不知道怎么弄。自己的第一反应就是一点一点直接取出来得什么时候去了,总想着有什么简单而又简便的方法一步到位。然而事实是没有什么捷径,通过这个又get到一点,不要怕麻烦,也不要被这种吓到了,一层一层解析就好。然后,下面的代码则是我尝试解出的过程:

<script>
var a={
   Count:1,
   Field:["channel","on_off","freq","sweep"],
   Row:[
       {
      VolVal:[
      {Type:6,iVal:1},
      {Type:7,dwVal:1},
      {Type:10,strVal:"1950.0000MHz"},
      {Type:10,strVal:"10.0000MHz"}
      ]    
       }
   ]
};
var form = []; //定义一个数组用来存储数据,因为可能不只一行数据
var c = a.Count; //数据行数
var field = a.Field;
for(let j = 0; j < c ; j++)
{
  var r = a.row;
  var data  = r[j];  //取每一行数据
  var col = data.ColVal; //每一行中的四组数据对象
  for(let i = 0; i < col.length; i++)
  {
    var name = field[i];//取出key值
    var colValue =col[i];//取出每一个数据对象
    var type = colValue.Type;//取出每个数据对象value的数据类型
    var value = 0;
    var obj = {};//用来向数组中push存储多个对象元素
    switch(type)
    {
       case 6:
              value = colValue.iVal;break;
       case 7:
              value = colValue.dwVal;break;
       case 10:
              value = colValue.strVal;break;       
    }
     obj = {name:value};//**想要将值以key value的形式存储起来??**
     form.push(obj);
  }

}
</script>

我的难点是,不知道怎么将解析出的结果,将key和value都存放到Json数组对象中去??

上面的代码原意是想每一次循环将key-value都存到新建的obj对象中,最后将对象push进form数组中存储起来。然而却发现得到的结果是:
[Object]:即[name:”10.000KHz”]
分析原因我们发现:
这里写图片描述

因此正确的处理应该是:
这里写图片描述

即将obj{}对象定义放到内层循环外,每一行数据则是一个对象,且因为obj的键名是动态生成的,不能用“.”表达式,“.”表达式代表后面所跟的是常量,因此最后出来的会报错。。
因此一定要特别注意“.”和“[]”的区别使用法!!

取出的Json对象数据为:
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值