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

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


如果我在Script Debugger中运行它,我可以将其显示为如下表所示,因此显然有可能。


但是,我尝试过的一切似乎都没有效果。基于许多SO答案,我尝试了不同的方法,例如遍历this question中的每个描述符索引。但是,这不再起作用了,因为该键似乎未包含在数组中。

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

谢谢

最佳答案

答案要推迟很多月,但是如果您或其他人在乎,这是我针对类似问题所做的。

签出(严重失效)AppScript framework。结合轻微修改的SBJSON,我可以通过Cocoa对象将任何AppleScript记录转换为JSON。

我在Mac软件商店免费提供的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

关于objective-c - 将AppleScript响应转换为JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19888406/

10-15 08:28