我有一个Cocoa应用程序,其中一部分是在Web视图中从用户那里获取AppleScript。我目前可以从一个命令(例如当前的iTunes歌曲名称)传递单个字符串,但是,如果我运行一个返回记录的命令(我相信它是基于我的研究,可能是错误的),如下所示我得到'(null)'作为stringValue。
tell application "iTunes"
get properties of current track
end tell
如果我在脚本调试器中运行它,我可以将其作为下表所示的表,这显然是可能的。
但是,我尝试过的任何东西似乎都没有用。基于一些SO答案,我尝试了不同的方法,例如在this question中循环遍历每个描述符索引。但是,这不再起作用,因为它似乎没有包含在数组中。
所以,基本上,我需要能够将AppleScript输出转换为JSON。我有一个串行器,所以这不是问题,只要我可以将它们放入我设置的Cocoa对象中。最好的方法是什么?
由于
答案 0 :(得分:1)
很晚几个月作为答案,但如果你或其他任何人关心,这就是我对类似问题所做的。
查看(遗憾地失效)AppScript framework。结合轻微修改的SBJSON,我可以通过Cocoa对象将任何AppleScript记录转换为JSON。
我在{ApperStore上免费提供的JSON Helper中使用了它。您还可以在Google代码here上查看早期版本的来源,如果您想使用修改后的SBJSON版本,这可能很有用。
在下面的示例中,AppleScript记录是通过脚本命令提供的。
@implementation makeJSONFromRecord
- (id)performDefaultImplementation {
NSDictionary *asRecord;
NSString *result;
AEMCodecs *codecs = [[AEMCodecs alloc] init];
// Use appscript framework to unpack the event into an object we can use
asRecord =[codecs unpack:[self directParameter]];
[codecs release];
// Use the JSON framework to convert the object to JSON notation
result = [asRecord JSONRepresentation];
if (result==nil) {
//We failed to create any valid JSON so return nothing
NSLog(@"Failed to make JSON from: %@", asRecord);
result=@"";
}
// Return the result to the applescript
return result;
}
@end