将AppleScript响应转换为JSON

时间:2013-11-10 10:02:49

标签: objective-c json cocoa applescript

我有一个Cocoa应用程序,其中一部分是在Web视图中从用户那里获取AppleScript。我目前可以从一个命令(例如当前的iTunes歌曲名称)传递单个字符串,但是,如果我运行一个返回记录的命令(我相信它是基于我的研究,可能是错误的),如下所示我得到'(null)'作为stringValue。

tell application "iTunes"
    get properties of current track
end tell

如果我在脚本调试器中运行它,我可以将其作为下表所示的表,这显然是可能的。

但是,我尝试过的任何东西似乎都没有用。基于一些SO答案,我尝试了不同的方法,例如在this question中循环遍历每个描述符索引。但是,这不再起作用,因为它似乎没有包含在数组中。

所以,基本上,我需要能够将AppleScript输出转换为JSON。我有一个串行器,所以这不是问题,只要我可以将它们放入我设置的Cocoa对象中。最好的方法是什么?

由于

1 个答案:

答案 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