您可以并且如何将远程数据(如JSON)获取到AppleScript中?

您可以并且如何将远程数据(如JSON)获取到AppleScript中?,applescript,Applescript,我有一个基于Web的API,我想通过AppleScript向其发送POST/GET请求。我想检索并解析响应,这样我就可以将其输入到另一个应用程序中 这可能吗?如果是,怎么做 例如,JSON数据如下所示: {“result”:“success”,“image”:“foo”,“name”:“bar”}要回答特定的问题(快速重读后),Applescript唯一的web支持是通过URL访问脚本库,它只是终端curl命令的包装。这是一个有点车,并没有报告一切,因为它应该 除此之外,Applescript中

我有一个基于Web的API,我想通过AppleScript向其发送POST/GET请求。我想检索并解析响应,这样我就可以将其输入到另一个应用程序中

这可能吗?如果是,怎么做

例如,JSON数据如下所示:


{“result”:“success”,“image”:“foo”,“name”:“bar”}

要回答特定的问题(快速重读后),Applescript唯一的web支持是通过
URL访问脚本
库,它只是终端
curl
命令的包装。这是一个有点车,并没有报告一切,因为它应该

除此之外,Applescript中也没有本机JSON支持,这样做会有点痛苦。为了解析JSON,您需要使用
Applescript的文本项分隔符

set mJson to "\"result\":\"success\",\"image\":\"foo\", \"name\":\"bar\"" -- get your data into a string somehow, like a function
set AppleScript's text item delimiters to {","}
set keyValueList to (every text item in mJson) as list
set AppleScript's text item delimiters to ""
(*"result":"success", "image":"foo",  "name":"bar"*)

repeat with thiskeyValuePair from 1 to (count keyValueList)
    set theKeyValuePair to item thiskeyValuePair of keyValueList
    set AppleScript's text item delimiters to {":"}
    set theKeyValueBufferList to (every text item in theKeyValuePair) as list
    set AppleScript's text item delimiters to ""
    set theKey to item 1 of theKeyValueBufferList
    (*"result"*)
    set theValue to item 2 of theKeyValueBufferList
    (*"success"*)
end repeat

当一切顺利时,这一切都完成了。您必须考虑格式错误的JSON,例如在您的示例中,它在不属于它的地方包含一个额外的逗号,以及诸如额外空格之类的差异。如果您可以在其他地方操纵数据以获得所需内容,我建议您这样做。Applescript不太适合这样做。

我使用正则表达式解析XML/HTML/JSON等。AppleScript本机不支持正则表达式,但您可以下载一个名为的脚本添加项,它允许您在AppleScript中使用它们

下载并安装脚本添加,然后查看以获取说明和示例代码


如果您不熟悉正则表达式(或者即使您不熟悉),一个名为的应用程序将帮助您为脚本找到正确的语法。

我需要在AppleScript中解析JSON,并制作了一个非常简单的可编写脚本的后台应用程序来实现这一点。它实际上只是将两个框架(JSON、Appscript)连接在一起

它现在在Mac AppStore上免费提供。您可以查看我们网站上的更多示例

用法非常简单:

tell application "JSONHelper"

    -- return JSON from an AppleScript list

    set jsonString to make JSON from {"A", "B", "C"}
    log jsonString

    set asList to read JSON from jsonString

    -- return JSON from an AppleScript record

    set jsonString to make JSON from {a_string:"string", a_list:{"abc", 123, false, true}}
    log jsonString

    -- return an AppleScript record from JSON

    set asRecord to read JSON from jsonString
    log asRecord

end tell

我需要一个不需要任何新依赖项的版本(比如安装应用程序)。因此,我制作了一个只有applescript的json编码器/解码器


我认为AppleScript没有任何本机支持(尽管我可能错了),但您可以始终使用
do shell script
。做得很好。这加上获取JSON的某种HTTP请求可能已经解决了我的问题。很酷-我刚刚使用“do shell脚本”和curl来获取JSON-但可能还有更优雅的东西。MAS版本现在有一个“fetch JSON”命令,以避免必须curl来下载JSON。在检查您的代码(我希望使用)时看起来您使用的是python,而不仅仅是applescript?是的,没错。但是python在Mac OS X上总是可用的。我认为只使用applescript是一种减缓速度的方法。是的,它运行良好,并且解码了JSON,我也想要它。。。当我把它扔进一个Xcode运行脚本时,虽然它给了我一些python错误,但我想Xcode对于它能运行和不能运行的东西很有趣:)最终用applescript编写了我自己的解析器,但正如你说的,它非常慢!