Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 穿越';数组的JSON数组';在python中';列表列表';格式_Javascript_Json_Nagios - Fatal编程技术网

Javascript 穿越';数组的JSON数组';在python中';列表列表';格式

Javascript 穿越';数组的JSON数组';在python中';列表列表';格式,javascript,json,nagios,Javascript,Json,Nagios,出于我不理解的原因,我需要解析的来自Web服务的JSON格式数据不在nme值对中为简单起见,为了减少开销,“返回的JSON的格式似乎与PythonEval兼容,但据我所知,不是与javascript兼容的格式(注意,我的javascript非常差,所以我可能会出错—php等,fine.js,不是很多!) 因此,数据返回为: [[0, 'OK'], [['ITEM10314', ['ITEM10397']], ['ITEM10315', ['cornflower']], ['ITEM10

出于我不理解的原因,我需要解析的来自Web服务的JSON格式数据不在nme值对中为简单起见,为了减少开销,“返回的JSON的格式似乎与PythonEval兼容,但据我所知,不是与javascript兼容的格式(注意,我的javascript非常差,所以我可能会出错—php等,fine.js,不是很多!)

因此,数据返回为:

[[0, 'OK'],
 [['ITEM10314', ['ITEM10397']],
  ['ITEM10315', ['cornflower']],
  ['ITEM10397', ['ITEM10315']],
  ['ITEM10514', ['ITEM10397']],
  ['ITEM003', []],
  ['ITEM004', []],
  ['servertest', ['ITEM004', 'ITEM003']],
  ['serverroot', []]]]
(如果您感兴趣,这是来自MKLiveStatus for Nagios LQL主机查询的回复)

第一个数组是状态,随后的数组由nagios中监视的主机和该主机的父级(在内部数组中)组成

很好,不是吗。但我需要将它转换成合适的键/值对,并且必须有一种比编写自己的解析器更好的方法(不仅因为这是一个数据输出,而且还有多个类似格式的数据输出)

我试图将这些都保存在原生js中,但如果有一种简单的jQuery方法,那么我很容易就会变得懒散。不需要担心旧浏览器,我不在乎,这个项目最终使用的是d3.js,它无论如何都不会在旧浏览器上工作

有什么建议吗?这个例子的深度不会低于这里,所以至少是一个已知的深度。然而,我不能简单地把它弄平,我需要知道在这之后主人有哪些父母


我在这里看到了一些python js链接,但没有看到列表中任意大小的未知列表。

类似的东西应该可以做到这一点

var data = [
    [0, "OK"],
    [
        ["ITEM10314", ["ITEM10397"]],
        ["ITEM10315", ["cornflower"]],
        ["ITEM10397", ["ITEM10315"]],
        ["ITEM10514", ["ITEM10397"]],
        ["ITEM003", []],
        ["ITEM004", []],
        ["servertest", ["ITEM004", "ITEM003"]],
        ["serverroot", []]
    ]
];

function parse(array) {
    var object = {
            ok: 1
        };

    if (!Array.isArray(array) && array[0][0] !== 0 && array[0][1] !== "OK") {
        return object;
    }

    object.ok = 0;
    array[1].forEach(function (element) {
        object[element[0]] = element[1];
    });

    return object;
}

console.log(parse(data));

上,我认为自定义解析器是将自定义多维数组转换为对象的唯一方法。如果不是JS对象表示法,它就不是(根据定义)JSON。@rick-所有JSON都是JS,但不是所有JS都是JSON。显示的代码是有效的js。您没有反驳我刚才所说的。如果您有一个数组数组,那么它本身就是无效的JSON。我没有说JS的有效性。我无法将其格式化为评论,需要OP在他的问题中更新它,或者需要具有适当权限级别的人更新它。我将其标记为版主帮助。你可以自己更新OP的问题-如果你没有代表级别来完成,我已经删除了我的答案,因为我不同意编辑,特别是编辑我的代码样本。我现在正在打电话,但我会在今天早上晚些时候(英国)一到笔记本电脑上就更新它。-[编辑只是更仔细地阅读它,并看到国防部修复了它,谢谢!]