Bash 解析 JSON 对象 jsawk

Bash Parse JSON Objects jsawk

我正在尝试解析一些 JSON,这是 Philips Hue API 的输出。

我找到了工具 jsawk,但不知何故我无法访问 JSON 对象中的数据。

命令:

... | jsawk 'return this.f709f9c0b-on-0.name'

有效,但遗憾的是我没有每个对象的 ID(例如 f709f9c0b-on-0)。有没有办法在不知道 ID 的情况下访问对象,然后找出该 ID。我尝试使用对象的“*”或迭代,但没有任何效果。

提前致谢

输出如下所示:

{
    "f709f9c0b-on-0": {
        "name": "Badezimmer on 0",
        "lights": [
            "4"
        ],
        "owner": "3e281978544fb15b42bc0e3a3f4ce3",
        "recycle": true,
        "locked": false,
        "appdata": {},
        "picture": "",
        "lastupdated": "2016-02-17T17:20:06",
        "version": 1
    },
    "69d313be0-on-0": {
        "name": "Klavier on 0",
        "lights": [
            "1"
        ],
        "owner": "3e281978544fb15b42bc0e3a3f4ce3",
        "recycle": true,
        "locked": false,
        "appdata": {},
        "picture": "",
        "lastupdated": "2016-02-17T17:31:05",
        "version": 1
    },
...
}
由于连字符,

f709f9c0b-on-0 不是有效的标识符,因此您不能使用点表示法。这可能有效(未经测试)

... | jsawk 'return this["f709f9c0b-on-0"].name'

我没有jsawk,但是可以这样做:

... | jq '.["f709f9c0b-on-0"].name'

只为世界其他地方。 我通过创建一个处理问题的 .jar 解决了这个问题。我发现在 Java 中比在 bash 中更容易做到这一点。

我用过这个JSON-类:https://github.com/stleary/JSON-java 只需下载文件,创建包 org.json 就可以了。

对我有用的Java代码是:

String JSON = "your JSON";
JSONObject jsonObject = new JSONObject(JSON);
    ArrayList<ArrayList<String>> keyArray = new ArrayList<>();
    Iterator<String> keys = jsonObject.keys(); //get all JSON keys

    while (keys.hasNext()) { //for all keys do...
        String key = (String) keys.next(); //get Current Key
       //Now you can access the Object in the Object with: 
jsonObject.getJSONObject(key).getString("name")
    }

我希望这对某人有所帮助。