# Expression equivalent of Python .join()?

**URL:** <https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [January 23, 2025, 3:11pm UTC](https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291 "2025-01-23T15:11:48Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ryan\_Deardorff](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan_deardorff/32/63815_2.png) [@Ryan\_Deardorff](https://forum.inductiveautomation.com/u/Ryan_Deardorff)\
**Post date:** [January 23, 2025, 3:11pm UTC](https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291/1 "2025-01-23T15:11:48Z")

</div>

Would this qualify as an AI "hallucination?"

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/c/3c37936c402c31723008dc82a1b97bfa44d08f3c.png)

It says there isn't an equivalent, then gives an example of an exact equivalent...which as far as I can see, doesn't exist.

It seems like something simple enough that there should be an expression alternative, but if so, Google is of no help.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 23, 2025, 3:14pm UTC](https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291/2 "2025-01-23T15:14:05Z")

</div>

🙈

I don't think there's an expression for this.

The expression language long pre-dates Ignition supporting arrays in the tag system, so expression functions that operate on or return array/list types are still uncommon even now.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [January 23, 2025, 3:29pm UTC](https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291/3 "2025-01-23T15:29:45Z")

</div>

The expression equivalent is `group_concat()`. It was extended at some point to work with arrays/lists in addition to datasets. Use is limited to perspective component properties that are arrays, or fragments of document objects that are arrays.

Unless you have my Integration Toolkit, in which case there are many ways to feed lists to it.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 23, 2025, 3:36pm UTC](https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291/4 "2025-01-23T15:36:46Z")

</div>

Nice.

> **[groupConcat | Ignition User Manual](https://docs.inductiveautomation.com/docs/8.1/appendix/expression-functions/aggregates/groupConcat)**
>
> Concatenates all of the values in the given column of the given dataset into a string, with each value separated by the string separator.

So... `groupConcat(["hello", "world"], " ")` or something like that.

Except the expression language doesn't have array/list literals... so it would have to come from somewhere.

---

<div class="post-metadata">

**Author:** ![Felipe\_CRM](https://avatars.discourse-cdn.com/v4/letter/f/dfb087/32.png) [@Felipe\_CRM](https://forum.inductiveautomation.com/u/Felipe_CRM)\
**Post date:** [January 23, 2025, 3:37pm UTC](https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291/5 "2025-01-23T15:37:42Z")

</div>

Manual says it was added in 8.1.8 ([on the `groupConcat()` page](https://docs.inductiveautomation.com/docs/8.1/appendix/expression-functions/aggregates/groupConcat)) but if you search the manual for some variant of "concatenation" the only obvious results are for the less-powerful `concat` expression. Searching `join` is even worse.

Might be good to have the manual updated somehow to make the secondary function less obscure.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [January 23, 2025, 3:38pm UTC](https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291/6 "2025-01-23T15:38:15Z")

</div>

Well, the expression language does not have native syntax for an array constant. With my toolkit:

```python
groupConcat(asList("hello", "world"), " ")

```

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [January 23, 2025, 3:39pm UTC](https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291/7 "2025-01-23T15:39:30Z")

</div>

Probably doesn't matter, in reality the array/list value is probably coming from a tag or something. Otherwise you could just type the joined result as a String literal.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [January 23, 2025, 3:41pm UTC](https://forum.inductiveautomation.com/t/expression-equivalent-of-python-join/101291/8 "2025-01-23T15:41:31Z")

</div>

> [@Kevin.Herron](#):
>
> result as a String literal.

Right. Most useful when the first argument is a dynamic expression. I'm usually putting a nested `forEach()` there.
