解析XML数据时,用get函数获取EXILITY值返回null的问题
解决方案
问题根源
你用get(column_name, "EXILITY")返回null的原因很明确:你的数据是对象组成的数组,"EXILITY"是对象内部@字段的取值,不是数组的键或索引。直接按值传get函数,自然找不到对应元素;用索引又会因为元素位置变动失效。
实现方案
下面针对两种常见数据处理场景给出具体代码:
场景1:Excel/Power BI(Power Query)
假设存储数组的列名为Data,添加自定义列时用以下公式:
= List.Select([Data], each _[@] = "EXILITY"){0}[$]
- 逻辑拆解:
List.Select([Data], each _[@] = "EXILITY"):从数组里筛选出所有@字段等于"EXILITY"的对象{0}:取筛选结果的第一个元素(你的数据里只有一个匹配项)[$]:提取该对象的$字段值,也就是你要的1
如果要避免无匹配项时报错,可加判断:
= let filtered = List.Select([Data], each _[@] = "EXILITY") in if List.Count(filtered) > 0 then filtered{0}[$] else null
场景2:JavaScript脚本处理
如果是用JS处理这个数组,直接用find方法定位:
const targetItem = yourArray.find(item => item["@"] === "EXILITY"); const targetValue = targetItem ? targetItem["$"] : null;
- 逻辑拆解:
find遍历数组,返回第一个符合@字段为"EXILITY"的对象- 三元运算符处理无匹配的情况,避免抛出错误
核心思路
不管用哪种工具,核心都是先根据@字段的值锁定目标对象,再提取对应$字段,彻底摆脱元素位置的限制。
内容的提问来源于stack exchange,提问作者Rohit Jha
相关产品推荐
相关产品推荐

