如何将应用程序包嵌入式JSON加载到AppleScript中?

时间:2016-06-07 16:28:50

标签: json applescript

我找到了这个Q& A(Can and how do you get remote data (e.g. JSON) into AppleScript?),并开始使用JSON Helper。

JSON数据

{
  "prop1": "text",
  "prop2": [
    {
      "prop3": "text",
      "prop4": "text"
    }
  ]
}

示例程序代码

-- set configPath to path to resource "config.json"
set configPath to POSIX path of (path to resource "config.json")
-- set configPath to "file://" & POSIX path of (path to resource "config.json")

set configOptionsString to (read POSIX file configPath)

tell application "JSON Helper"
    -- set configOptions to fetch JSON from configPath
    set configOptions to read JSON from configOptionsString
    -- set configOptions to make JSON from configOptionsString
end tell

-- display dialog configPath as string
display dialog configOptionsString
display dialog configOptions
display dialog configOptions as string

结果

configPath正确显示基于'/'的POSIX路径。 configOptionsString正确包含JSON文本。 configOptions错误地为空。

方法#1

唯一的问题是,在尝试使用fetch JSON from命令时,我无法强制它使用本地文件路径并获取我期望的文本/ JSON内容。

我已尝试过HFS和POSIX样式的文件路径,包括前缀为file://的POSIX,从而生成此格式(file:///...)。我还通过在命令中附加as string来解决任何别名错误(我认为是HFS路径),例如在调试通过display dialog指令查看路径时。

我知道它可以在我使用它时找到资源:path to resource "config.json"。在重新启动脚本编辑器之前,它有一个关于找不到资源的错误。

方法#2

我甚至尝试正常加载文件的内容,并使用read JSON from命令将它们解析为字符串:

set configOptionsString to (read POSIX file configPath)

tell application "JSON Helper"
  set configOptions to read JSON from configOptionsString
end tell

方法#3

为了完整起见,我尝试使用相同的字符串并通过make JSON from命令运行它,只是为了尝试它,但它也产生空输出。

问题

JSON帮助程序(Examples)是否能够执行此操作,如果是,我应该如何或应该尝试使用applescript-json之类的工具?

2 个答案:

答案 0 :(得分:1)

是的,JSON Helper能够做到这一点,而不是方法#1 - 它只影响http URL - 也不会#3 - 它从AppleScript字典{foo : "bar"}创建一个JSON字符串,而不是相反 - ,但接近#2。

方法#2的问题很可能是那种文件路径(或损坏的JSON)。

AppleScript read命令接受以下格式:

  • POSIX路径(斜线分隔) - read "/Users/myUser/json.txt"
  • AppleScript别名说明符 - read (path to resource "json.txt")
  • HFS路径(冒号分隔),前缀为file - read file "Macintosh HD:Users:myUser:json.txt"

答案 1 :(得分:0)

除非您需要支持旧的OS X版本,否则请通过AppleScript-ObjectiveC桥使用Cocoa的NSJSONSerialization类,该桥自10.10以来一直是AS中的本机功能。