问题描述
这里是一个JSON array Shortcut测试JSON列表的示例(在测试环境中使用有效的API令牌)。
快捷方式中有一些“快速查看”和Pretty Print Dictionary操作,以易于阅读。
理想模型
使用“从列表中选择”操作,快捷方式用户从显示的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" ]
注意:快捷方式示例使用“获取内容”操作返回所有标签(包括通过发送回这些长字符串而创建的新标签),因此标签的选择已经过硬编码,以便于使用。 / em>
如果用户选择并发送单个标签(例如bar2
),则不会进行任何额外的操作(因为没有添加额外的新行),并且可以按预期的方式构建数组(例如,{{1} }。
发送“合并文本”“内置”数组
为避免这种情况,我尝试了结合使用“组合”和“文本”操作来制作自己的数组。
"tags": [ "bar2" ]
如果我这样做,快捷方式将“逃脱快乐”,结果选择了三个标签,如下所示:
Combine 'Chosen Item' with 'Custom' ","
Text
"Combined Text"
Set variable 'tags' to "Text"
在“转义双引号”的路径下存在疯狂("tags": [ "\"bar1\",\"bar2\",\"bar3\"" ]
),将双引号更改为单引号会将结果数组作为字符串发送:
\\\",\\\"
这使我着眼于“获取内容”操作的“请求正文”,因为双引号被添加在数组之前。 “获取内容”操作具有"tags": [ "'bar1','bar2','bar3'" ]
作为数组。
如果您深入研究tags
数组项(在“获取内容”操作中),我可以添加的选择是文本,数字,数组,字典或布尔值。选择数组将在此数组中创建一个数组(不是我想要的,它已经是一个数组),因此文本是最佳选择。这是我单引号的来源。知识就是力量。
从输入中获取字典
我还尝试使用“从输入获取字典”操作将数组转换为字典,将其解析为变量,然后将其放入“获取内容”操作请求中。我能看到此工作的唯一方法是,如果我通过“从输入获取字典”操作转换并构建请求主体的全部,因为请求主体已经是“字典”类型-添加一个将文本项添加到字典中会为文本添加键/值对(我无法放入字典或数组)。
在“获取内容”操作中列出各个标签
我唯一想到的其他解决方法是执行“ For Each”操作,将每个选定标签保存为单独的变量,然后将每个标签传递到tags
的最终数组项中。
将每个变量添加到单独的变量中以在tags
数组下以文本形式列出似乎很麻烦和脆弱。如果可以使用“动态变量”,则可以在原处使用tags
,其中ChosenTag_n
是所选标签的索引。目前,示例已在biiiig嵌套的“ If”操作中硬编码(哦,不)。
从好的方面来说,这确实有效:
n
...但是,如果“选择的项目”> "tags": [ "bar1","bar3" ]
个变量的数量,它将“丢失数据”。我还刚刚在单个变量中创建了自己的数组,并嵌套了“ If”语句。双重感叹。
可能的解决方案和TL; DR
理想情况下,应该将从“从列表中选择”操作中选择的(多个)项目格式化为数组,并且“获取内容”操作应按预期接受并解析该数组。
我试图避免创建或写入文件,并避免创建自己的自定义“请求正文”。
我只在同一主题(现已存档)上找到this one other post (Reddit)。
快捷方式是否无法正确解析数组/这是iOS 14可以解决和修复的问题,还是(很可能)我是马铃薯人,并且在格式化数组时缺少某些关键信息?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)