javascript - 将对象附加到 JSON 列表

标签 javascript json

发生异常,我不确定为什么,因为我是 JS 新手。一旦到达 testData["beacons"].append(beacon); 行,我的代码就会跳转到 catch(e)。我假设我不能将对象附加到其他数组?

JS:

$(document).ready(function() {
    // Data to describe what kind of test
    var testData = {
        "timestamp": "",
        "hive": 0,
        "hdfs": 0,
        // Contains a list of testData objects
        "beacons":[]
    };


    var testRun = document.getElementById("test-form");
    testRun.addEventListener('submit', function(event) {
        event.preventDefault();
        var selectedTest = document.querySelector('input[name=test-select]:checked');
        alert(selectedTest);
        var testType = selectedTest.id;
        if (testType == "hdfs-test") {
            testData["hdfs"] = 1;
            testData["hive"] = 0;
        } else if (testType == "hive-test") {
            testData["hdfs"] = 0;
            testData["hive"] = 1;
        } else if (testType == "hdfs-hive-test") {
            testData["hdfs"] = 1;
            testData["hive"] = 1;
        } else {
        //    null
        }

        var events = document.getElementById("event-textarea").value;
        // check in valid input
        var eventSource = events.replace("],[","],,,,[");
        // beaconLists allows users to submit --> [{beacon1}, {beacon2}, ...], [{beacon3}, {beacon4}, ...]
        var beaconLists = eventSource.split(",,,,");
        for (var i = 0; i < beaconLists.length; i++) {
            // inspect one list in beaconLists [{beacon1}, {beacon2}, ...]
            var beaconList = beaconLists[i];
            try {
                // list of JSON objects
                var beaconObjList = JSON.parse(beaconList);
                for (var j = 0; j < beaconObjList.length; j++) {
                    var beaconObj = beaconObjList[j];
                    if (beaconObj["data"] && beaconObj["application"]) {
                    //    successful parse to find events
                    //    describe beacon being tested
                        alert("yes");
                        var beacon = {
                            "app_name": beaconObj["application"]["app_name"],
                            "device": beaconObj["application"]["device"],
                            "device_id": beaconObj["application"]["device_id"],
                            "os": beaconObj["application"]["os"],
                            "os_version": beaconObj["application"]["os_version"],
                            "browser": beaconObj["application"]["browser"],
                            "beacon": beaconObj
                        };
                        // append to testData
                        testData["beacons"].append(beacon);
                        // reset beacon so we can append new beacon later
                        beacon = {};
                    } else {
                    //    notify event isn't in the correct format?
                        alert("no");
                    }
                }
            } catch (e) {
            //     notify bad JSON
                alert("failed");
            }
        }
        console.log(testData);
        //$.ajax({
        //    type: "POST",
        //    url: "/test/",
        //    data: testData,
        //    success: function () {
        //        alert("yay");
        //    },
        //    failure: function () {
        //        alert("boo");
        //    }
        //});

    });

});

最佳答案

拥有一个对象数组并没有错。 JavaScript 处理得很好。主要问题是 append 是一种用于添加元素的 jQuery API 方法(伪原生 appendChild)。 push 是您添加到数组的方式。

testData["beacons"].push(beacon);

此外,您的这部分代码有问题。

// reset beacon so we can append new beacon later
beacon = {};

变量beacon和这里加的testData["beacons"]是一样的。在JavaScript中,testData["beacons"]最近的beacon的值与变量beacon相同。当变量 beacon 中的值设置为 {} 时,数组的值也是如此。这行代码只需要删除。在设置的变量环境中,var 的使用将为每次迭代的beacon 设置一个新变量。

关于javascript - 将对象附加到 JSON 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27609024/

相关文章:

javascript - jQuery:附加可移动的div

javascript - 调用 FatSecret Sharp API 此时无法启动异步操作

java - 如何根据值JSON设置选择项?

c# - 从 JSON 数组反序列化和解析只需要的数组

javascript - 如何使用 Javascript 排除不存在的 JSON 数据?

javascript - Firestore WEB 触发事件

javascript - 错误无限滚动Javascript,向上滚动时不加载

javascript - Angularjs 中的模块问题

php - json_encode - PHP 给出不完整的 json 字符串

javascript - CSS 用户选择 : none causes focus event on drag in Google Chrome