如何将项目推送到json文件?

时间:2017-03-20 10:11:59

标签: javascript json push

我是javascript的新手,想知道如何将价值推向json。 我试图在谷歌查看,但找不到我想要的任何解决方案。

这是我推送javascript的代码。

var jsonfile = {channel: []};
function WebSocket(){
  if ("WebSocket" in window){
    var channel = "hello";
    var socket = io.connect("my socket address");

    socket.on(channel, function (d) {
      var data = JSON.parse(d);
      //console.log(channel + " : " + d);
      var theDiv = document.getElementById(data.node_info[1].info.mac);
      if(theDiv == null) {
        var divTag = document.createElement("div");
        divTag.id = data.node_info[1].info.mac;   //"drag1"
        divTag.className = "draggable js-drag";
        divTag.innerHTML = data.node_info[1].info.mac;
        document.getElementsByTagName('body')[0].appendChild(divTag);
        jsonfile.channel.push(divTag.id);
        console.log(jsonfile)
        //console.log(jsonfile.channel.length);
        //$('#'+data.node_info[1].info.mac).load('#'+data.node_info[1].info.mac);
      }
    });
    socket.on('crc_err', function(packet){
      console.log("crc_err : " + packet);
    });
    socket.on('type_err', function(packet){
      console.log("type_err : " + packet);
    });
  }
  else{
                // The browser doesn't support WebSocket
                // alert("WebSocket NOT supported by your Browser!");
      }
  }

我正在将mac地址从webSocket推送到var jsonfile,然后想将其他值推送到该mac地址,如下面的代码

for (i = 0; i <= jsonfile.channel.length; i++){
  if($(jsonfile.channel[i]).css('left') != 0){
    jsonfile.channel[i].push([$(jsonfile.channel[i]).css('left')]); ------>ERROR
    console.log(jsonfile.channel[i]);
  }

但是,Uncaught TypeError: jsonfile.channel[i].push is not a function

给我一​​个错误

我希望它像将div的样式(左值)推送到该mac地址。

jsonfile = {channel: ["B8:27:EB:FF:7B:45" : [$(jsonfile.channel[i]).css('left')]]}

我该如何解决这个问题......? 有人帮帮我吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

在这种情况下,jsonfile.channel是一个数组,其原型链中有push方法。

Array.push将新项添加到数组的末尾。您尝试使用的数据结构不是有效的JavaScript。 JavaScript中的数组可以包含许多不同的数据类型,但它是一个简单的数据结构;不知道数组中的关联。数组只是一个有序的值列表,从元素0处的项开始,以元素n处的项结束,其中n是数组的长度(-1,因为我们从0开始)。

在这种情况下,您将字符串值(mac地址)推送到&#34; jsonfile.channel&#34;阵列。字符串值没有&#34; push&#34;方法,因此您看到的错误为jsonfile.channel[i].push is not a function

我认为你想要的是使用嵌套对象,它可以让你选择存储多个关联值,所以:

jsonfile = {channel:{"B8:27:EB:FF:7B:45": $(jsonfile.channel[i]).css('left')}}

如果要添加到新对象,只需执行以下操作:

jsonfile.channel['XX:XX:XX:XX:XX:XX'] = $(jsonfile.channel[i]).css('right')

其中XX:XX:XX:XX:XX:XX是jsonfile.channel对象中项目的键名。

我建议您阅读不同的JavaScript数据类型,以找到最适合您需求的内容。在网上提供许多免费的JavaScript入门课程之一,这是明智的时间投入。

我希望这很有用。如果有任何不清楚的地方,请随时跟进。