当我使用AppleScript获取对象的属性时,返回了一个 record。
tell application "iPhoto"
properties of album 1
end tell
==> {id:6.442450942E+9, url:"", name:"Events", class:album, type:smart album, parent:missing value, children:{}}
如何迭代返回记录的键/值对,以便不必确切知道记录中的键是什么?
为了澄清这个问题,我需要枚举键和值,因为我想编写一个通用的AppleScript例程来将记录和列表转换为JSON,然后脚本可以输出JSON。
4条答案
按热度按时间kyvafyod1#
我知道这是一个老Q,但现在(10.9+)有可能访问键和值。在10.9中,你需要使用脚本库来运行,在10.10中,你可以使用脚本编辑器中的代码:
这不是黑客或变通方法。它只是使用“新”的能力来访问AppleScript中的Objective-C-Object。在搜索其他主题时发现了这个问题,并忍不住回答了这个问题;- )
***更新以提供JSON功能:***当然,我们可以更深入地研究基础类并使用NSJSONSerialization对象:
玩得开心,迈克尔/汉堡
ffdz8vbo2#
如果你只想遍历记录的值,你可以这样做:
但我不太清楚你真正想要的是什么。
bcs8qyzn3#
基本上,正如AtomicToothbrush和foo所说的,AppleScript记录更像是C结构体,有一个已知的标签列表,而不是像一个关联数组,有任意的键,并且没有(体面的)语言内的方式来内省记录上的标签(即使有,你仍然会遇到应用它们来获取值的问题)。
在大多数情况下,答案是“使用关联数组库代替”。然而,您特别感兴趣的是来自
properties
值的标签,这意味着我们需要一个黑客。通常的一个是使用记录强制错误,然后解析错误消息,如下所示:解析它,特别是在允许非英语语言环境的情况下解析它,留给读者作为练习。
bnl4lu3b4#
ShooTerKo的回答对我帮助很大。
我将提出另一种可能性,我很惊讶没有看到其他人提到,但是,我必须在我的脚本中在AppleScript和JSON之间切换很多次,如果您可以在需要运行脚本的计算机上安装软件,那么我强烈推荐JSONHelper,基本上可以解决整个问题:
https://github.com/isair/JSONHelper