这是用于测试 JSON 列表的JSON 数组快捷方式示例(在测试环境中使用有效的 API 令牌)。
通过快捷方式有一些“快速查看”和漂亮的打印字典操作,以便于阅读。
理想模型
使用“从列表中选择”操作,快捷方式用户从显示的列表中tags
选择project
. 用户可以tags
从列表中选择多个(选择多个已启用)。然后,快捷方式执行“获取 URL 内容”操作以发送带有 JSON“请求正文”的 POST 请求。三个主要键是:(pid
项目 ID)作为数字、created_with
字符串和tags
数组:
"data": {
"pid": 123,
"created_with": "Workflow",
"tags": [ "bar1", "bar2", "bar3" ]
}
发送“选择的项目”数组
如果我将(从“从列表中选择”操作中选择的项目数组)中tags
的值发送到“获取内容”操作,快捷方式会解释该列表。Chosen Item
不是将列表作为字符串数组传递(如上面理想示例中所列),而是作为单个字符串传递,列表项由换行符分隔\n
:
"tags": [ "bar1\nbar2\nbar3" ]
注意:快捷方式示例使用“获取内容”操作来返回所有标签(包括通过发回这些长字符串创建的新标签),因此标签的选择已经过硬编码以便于使用。
如果用户选择并发送单个标签(例如bar2
),则没有额外的修改(因为没有添加额外的新行),并且数组按预期构建(例如"tags": [ "bar2" ]
)。
发送“组合文本”“构建”数组
为了规避这一点,我尝试了“组合”和“文本”操作的组合来制作我自己的数组。
Combine 'Chosen Item' with 'Custom' ","
Text
"Combined Text"
Set variable 'tags' to "Text"
如果我这样做,Shortcuts 将获得“快乐逃脱”,结果选择三个标签如下:
"tags": [ "\"bar1\",\"bar2\",\"bar3\"" ]
沿着“转义双引号”的路径是疯狂(\\\",\\\"
)并将双引号更改为单引号将结果数组作为字符串发送:
"tags": [ "'bar1','bar2','bar3'" ]
这导致我查看“获取内容”操作的“请求正文”,因为在数组之前添加了双引号。'Get contents of' 动作有tags
一个数组。
如果您深入研究tags
数组项(在“获取内容”操作中),我可以添加的选项是文本、数字、数组、字典或布尔值。选择数组会在这个数组中创建一个数组(不是我想要的,它已经是一个数组),所以文本是最好的选择。这就是我挑出双引号的来源。知识就是力量。
从输入中获取字典
我还尝试使用“从输入获取字典”操作将数组转换为字典,将其解析为变量,然后将其放入“获取内容”操作请求中。我可以看到这项工作的唯一方法是,如果我通过“从输入获取字典”操作转换和构建所有请求正文,因为请求正文已经是“字典”类型 - 将文本项添加到字典会添加文本的键值对(我不能放入字典或数组)。
在“获取内容”操作中列出单个标签
我能想到的唯一其他解决方法是让“For Each”操作将每个选定的标签保存为一个单独的变量,并将每个标签传递到tags
.
将每个变量添加到单独的变量中以作为tags
数组下的文本列出似乎既麻烦又脆弱。如果可以使用“动态变量”,则ChosenTag_n
可以在其中使用n
所选标签的索引。现在,一个示例被硬编码在一个 biiiig 嵌套的 'If' 动作中(哦,不)。
从好的方面来说,这确实有效:
"tags": [ "bar1", "bar2", "bar3" ]
ChosenTag_n
...但是,如果“选择的项目”>变量数,它将“丢失数据” 。我还刚刚在单数变量中创建了自己的数组,并嵌套了“If”语句。双重叹息。
可能的解决方案和 TL;DR
理想情况下,从“从列表中选择”操作中选择的(多个)项目应格式化为数组,并且“获取内容”操作应按预期接受并解析数组。
我试图避免创建或写入文件,以及避免创建自己的自定义“请求正文”。
我只发现了关于同一主题的另一篇文章(Reddit) (现已存档)。
快捷方式是否无法正确解析数组/这是 iOS 14 解决和修复的问题,或者(更有可能)我是否马铃薯并且我错过了格式化数组的一些关键内容?