我有一个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/