UiPath使用Newtonsoft解析JSON提取指定路径生成选择器字符串方案
解决方案
你可以直接在UiPath中使用Invoke Code活动,结合Newtonsoft.Linq的JToken内置方法完成属性提取和字符串拼接,不需要自定义类,具体实现如下:
前置准备
- 无需额外安装依赖包,UiPath默认JSON活动已经内置Newtonsoft.Json相关命名空间
- 输入变量:已经获取到的目标节点JToken变量
myJToken - 输出变量:拼接完成的结果字符串
resultStr(类型为String)
实现代码(C#版本,直接复制到Invoke Code活动即可运行)
using System.Text; using Newtonsoft.Json.Linq; StringBuilder sb = new StringBuilder(); // 1. 拼接首行element节点下的html标签 JObject htmlNode = (JObject)myJToken["element"]["html"]; string htmlAttrs = string.Join(" ", htmlNode.Properties().Select(p => $"{p.Name}='{p.Value}'")); sb.AppendLine($"<html {htmlAttrs}/>"); // 2. 处理anchor节点,非空则输出内部webctrl标签 JObject anchorNode = (JObject)myJToken["anchor"]; if (anchorNode.HasValues) { JObject anchorWebctrl = (JObject)anchorNode["webctrl"]; string anchorAttrs = string.Join(" ", anchorWebctrl.Properties().Select(p => $"{p.Name}='{p.Value}'")); sb.AppendLine($"<webctrl {anchorAttrs}/>"); } // 3. 处理nav节点,非空则输出属性标签 JObject navNode = (JObject)myJToken["nav"]; if (navNode.HasValues) { string navAttrs = string.Join(" ", navNode.Properties().Select(p => $"{p.Name}='{p.Value}'")); sb.AppendLine($"<nav {navAttrs}/>"); } // 4. 拼接末尾element节点下的webctrl标签 JObject elementWebctrl = (JObject)myJToken["element"]["webctrl"]; string webctrlAttrs = string.Join(" ", elementWebctrl.Properties().Select(p => $"{p.Name}='{p.Value}'")); sb.AppendLine($"<webctrl {webctrlAttrs}/>"); // 将结果赋值给输出变量 resultStr = sb.ToString().TrimEnd();
代码说明
- 逻辑完全匹配你给出的拼接规则,自动判断anchor、nav节点是否为空,空节点直接跳过
- 属性为动态遍历拼接,不需要硬编码属性名称,新增属性也不需要修改代码
- 完全基于JToken原生方法实现,不需要自定义类,完全适配UiPath使用场景
- 如果你习惯使用VB.NET,仅需要将上述C#代码转换为VB语法即可,核心逻辑完全一致
内容的提问来源于stack exchange,提问作者Meghdut Saha
相关产品推荐
相关产品推荐

