> For the complete documentation index, see [llms.txt](https://doc.duaer.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.duaer.com/zh/code/expressions.md).

# 在 Duaer 里用表达式转换数据

Duaer 表达式写在 {{ }} 里，可在支持表达式的参数中调用转换方法。只做字段整理时，先用 Edit Fields（Set）。
## 在哪里写表达式

把参数从固定值改成 Expression，再写表达式。从 INPUT 把字段拖进来，或直接输入。花括号外的字原样留下，花括号里换成算出来的值。

复杂整理不要散落在很多节点的参数里。用 Edit Fields（Set）先算出新字段、改掉旧字段或删掉不要的字段，后面的节点只读整理后的数据。

## 从 Webhook 正文取一个字段

触发节点把对方发来的 JSON 放在 body 上时，下一个节点这样取城市：

```
{{ $json.body.city }}
```

也可以写成 {{ $json["body"]["city"] }}。点号和方括号是同一条路径。

## 写多句 JavaScript

要写多句时，用立即执行的函数包起来，最后 return 你要的值。日期计算用 Luxon 的 DateTime。

```
{{(() => {
  const end = DateTime.fromISO("2017-03-13");
  const start = DateTime.fromISO("2017-02-13");
  return end.diff(start, "months").toObject();
})()}}
```

## 在凭证字段里用表达式

凭证字段也可以写表达式。它按这一次执行的数据来算，能读到前面节点已经交出的值，例如 Webhook 带来的令牌。不同执行各自计算，不会共用上一次的结果。

## 常见问题

- JSON Output 无效：交出去的不是合法 JSON，或引用了这次输入里不存在的字段。
- 找不到表达式要的数据，或提示某个节点还没执行：先把那一步跑通。Code 节点里可以用 $("节点名").isExecuted 判断前面有没有跑过。
- 语法错误：多了一个点、少了一个括号。例如 {{ $("If").item.json. }} 末尾的点无效。
## Questions

### Duaer 表达式怎么写？

在 Duaer 里写在双花括号里，例如 {{ $json.body.city }}。参数先改成 Expression。花括号外的文字保留，花括号里换成算出来的值。

### Duaer 表达式找不到数据时先查什么？

通常是前面的节点还没执行，或这次没有该字段。先把表达式点名的节点跑通。不要留下末尾的点，例如 {{ $("If").item.json. }} 无效。

