Javascript 穿越';数组的JSON数组';在python中';列表列表';格式
出于我不理解的原因,我需要解析的来自Web服务的JSON格式数据不在nme值对中为简单起见,为了减少开销,“返回的JSON的格式似乎与PythonEval兼容,但据我所知,不是与javascript兼容的格式(注意,我的javascript非常差,所以我可能会出错—php等,fine.js,不是很多!) 因此,数据返回为: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
[[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的问题-如果你没有代表级别来完成,我已经删除了我的答案,因为我不同意编辑,特别是编辑我的代码样本。我现在正在打电话,但我会在今天早上晚些时候(英国)一到笔记本电脑上就更新它。-[编辑只是更仔细地阅读它,并看到国防部修复了它,谢谢!]