json - 过滤 JSON - 获取非空值
问题描述
当我从 Excel 读取行时,我得到 JSON 响应:
body: {
"1": "",
"2": "X",
"3": "Y",
"4": "",
...
}
一行代表一年 - 365 天,其中每天可能包含一些单字母信息(X、Y、Z..)或""
- 问题是现在我必须访问所有 365 天,这需要很长时间。
我只需要访问那些!= ""
,有没有可能怎么做?谢谢
解决方案
使用带有 xpath() 和 xml() 函数的表达式来解析数据,然后在 Power Automate 中以本机方式重新解析该数据。
我建议我认为,无论您为谁使用此解决方案,都可能不是在 excel 中处理这些数据的理想位置。最好将其放置在 SharePoint 列表或某种数据库中,因为您要存储数据以供后续处理。一旦到了那里,这些困难就不会那么普遍了。
以下流程将获得您需要的内容:
此流程基于John Liu 出色的 Power Automate XML hack,它(在流程准备好之后)将 JSON 对象转换为 XML。我建议阅读以了解此处的步骤。
一旦 XML 已被询问字段名称和值,并将其放入新数组(在 Select 操作中),则可以将其过滤为非空值。从那时起,您可以随意处理。
细节:
rootification - 这将对象放置在
xpath()
函数可以解析的结构中。xmlify
xml()
- 这使用andxpath()
函数将对象转换为 XML 字符串。为 JSON 数组选择- 这将使用 xml 中的字段名称和字段值创建一个新数组。我稍后会分解这一步。
过滤器数组- 这用于
item()['Value']
检查您创建的字段的结果。任何非空白的都将在它创建的最终数组中。
如果您希望清除操作,可以将数字 1、2 和 3 组合到“发件人”字段中:
xpath(xml(json(concat('{ "root": ', string(variables('excel')), ' }'))), '/root/*')
在 Select for JSON array 操作中:
if(startsWith(string(xpath(item(), 'name(/*)')), '_x003'), if(equals(length(string(xpath(item(), 'name(/*)'))), 7), substring(string(xpath(item(), 'name(/*)')), 5, 1), concat(substring(string(xpath(item(), 'name(/*)')), 5, 1), substring(string(xpath(item(), 'name(/*)')), 7))), string(xpath(item(), 'name(/*)')))
真正需要关注的重要部分是真正的分支——xpath(item(), 'name(/*)')
函数xpath()
将从 XML 中提取字段的名称。
嵌套 if/then 结构的第一层检查 XML 字段名称是否以“_x003”开头(我假设它表示整数/数字),如果以该开头,则执行下一段,否则将简单地返回字段名称作为字符串。
第二层查看数字字段名称,因此如果您只是xpath(item(), 'name(/*)')
在其中使用字段“1”,则结果将提供“ x0003 1 ”。“3”和最后一个下划线之间的“1”是字段名称。当您达到双字符(任何类型)时,它将下一个字符放在最后一个下划线之后。因此,上面公式的其余部分是一种万能的方法(适用于任何阅读者),它将将该字段名称中的任何内容处理到 JSON 中。如果需要,我会分解它。
xpath(item(),'string(//*)')
该'Value'
字段用于xpath()
从先前生成的 XML 中的每个项目中提取值。
推荐阅读
- shopify - Shopify 订单 api 返回无效数据
- development-environment - 应用程序可以在 USB 调试手机上运行,但不能在其他手机上运行?
- python - 在 Python 中生成长时间运行的后台任务
- node.js - Botframework v4 Directline integration:有没有办法获取从直接传输到 Chatbot 生成的对话 id(nodejs 代码)
- apache-kafka - 注册 Avro 模式时出错:写入 Kafka 存储时注册模式操作失败;错误代码:50001
- php - CURLOPT_CAINFO/CAPATH 究竟是什么?
- c++ - 如何在 GTK3 上强制 CORE opengl 配置文件?(#版本 330)
- .net - 生成源代码哈希的最佳方法是什么?
- javascript - 无法在我的 HTML 页面上显示另一个 Highcharts 图表 - Django
- javascript - Math.random() 结果的位数