【问题标题】:Traversing 'JSON Array of arrays' in python 'List of lists' format以 python 'List of lists' 格式遍历'JSON Array of arrays'
【发布时间】:2013-04-29 22:43:00
【问题描述】:

由于我不明白的原因,我需要解析的来自 web 服务的 JSON 格式数据不在 nme 值对中。 “为简单起见并减少开销”返回的 JSON 似乎是一种适用于 python eval 的格式,但据我所知,不适用于 javascript(警告,我的 javascript 很差,所以我可能是错的 - php 等,很好.js,没那么多!)

所以数据返回为:

[[0, 'OK'],
 [['ITEM10314', ['ITEM10397']],
  ['ITEM10315', ['cornflower']],
  ['ITEM10397', ['ITEM10315']],
  ['ITEM10514', ['ITEM10397']],
  ['ITEM003', []],
  ['ITEM004', []],
  ['servertest', ['ITEM004', 'ITEM003']],
  ['serverroot', []]]]

(如果您有兴趣,这是来自 Nagios LQL 主机查询的 MKLiveStatus 的回复)

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

很好,不是吗。但是我需要把它变成像样的键/值对,并且必须有一种比为此编写自己的解析器更好的方法(尤其是因为这是一个数据输出,但还有更多类似格式的输出)。

我试图将这一切都保留在本机 js 中,但如果有一个 jQuery 简单的方法,那么我很容易导致懒惰。不用担心旧浏览器,我不在乎,这个项目最终使用了 d3.js,它无论如何都不能在旧浏览器上运行。

有什么建议吗?在这种情况下,深度不会低于这里的深度,因此至少是已知的。但是,我不能把它弄平,我需要知道主机在这之后有哪些父母。

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

【问题讨论】:

  • 我认为自定义解析器是将其自定义多维数组转换为对象的唯一方法
  • 如果它不是 JS 对象表示法,它不是(根据定义)JSON。
  • @rick - 所有 JSON 都是 JS,但并非所有 JS 都是 JSON。显示的代码是有效的 js。
  • 你没有反驳我刚才说的话。如果您有一个数组数组,那么它本身就不是有效的 JSON。我没有说 JS 的有效性。

标签: javascript json nagios


【解决方案1】:

应该这样做

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));

开启jsfiddle

【讨论】:

  • 我无法将其格式化为评论,需要 OP 在他的问题或具有适当权力水平的人中更新它。
  • 我已将其标记为寻求版主帮助。
  • 您可以自己更新 OP 的问题 - 如果您没有代表级别来通过它,它仍然会被同行评审和接受。
  • 我已删除我的答案,因为我不同意编辑,尤其是编辑我的代码示例。
  • 我现在正在打电话,但今天早上晚些时候我一拿到笔记本电脑就会更新这个(英国)-[编辑只是更仔细地阅读它并看到 mod 修复了它,谢谢!]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
相关资源
最近更新 更多