# Strange Array/Object behaviour DataValue

**URL:** <https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463>\
**Category:** General\
**Created:** [31 January 2023 07:28 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463 "2023-01-31T07:28:41Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![fabi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/fabi/32/76122_2.png) [@fabi](https://discourse.nodered.org/u/fabi)\
**Post date:** [31 January 2023 07:28 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/1 "2023-01-31T07:28:41Z")

</div>

I am using the node-red-contrib-opcua client node to read multiple variables at once. When i use node.warn() to debug the whole msg.payload array, i can access the different objects in it how i am used to it:

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/f/a/fa6b4722db275d2f4548b69b21d2d690811c77f3.png)  
But when i try to access a single object directly, i get the following result:  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/0/c/0cb03d86b201b93fed68ea291e6bc63d9379d1c3.png)  
Is there a way to convert this to an object?

---

<div class="post-metadata">

**Author:** ![Buckskin](https://avatars.discourse-cdn.com/v4/letter/b/b9e5f3/32.png) [@Buckskin](https://discourse.nodered.org/u/Buckskin)\
**Post date:** [31 January 2023 18:59 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/2 "2023-01-31T18:59:50Z")

</div>

try

```auto
node.warn(msg.payload[1])

```

---

<div class="post-metadata">

**Author:** ![fabi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/fabi/32/76122_2.png) [@fabi](https://discourse.nodered.org/u/fabi)\
**Post date:** [1 February 2023 06:08 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/3 "2023-02-01T06:08:28Z")

</div>

This is what i tried. The unexpected result is in the second screenshot.

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [1 February 2023 09:41 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/4 "2023-02-01T09:41:17Z")

</div>

Hi,

- What version of Node RED are you using?
- Any chance you can share the whole payload array JSON?

---

<div class="post-metadata">

**Author:** ![fabi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/fabi/32/76122_2.png) [@fabi](https://discourse.nodered.org/u/fabi)\
**Post date:** [1 February 2023 10:02 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/5 "2023-02-01T10:02:20Z")

</div>

Hi, i am using Node-RED version 2.2.2. The payload array looks like this:

```auto
[{"value":{"dataType":"Boolean","arrayType":"Scalar","value":true},"statusCode":{"value":0},"sourceTimestamp":"2022-09-13T05:29:42.492Z","sourcePicoseconds":897000000,"serverTimestamp":"2022-09-13T05:29:42.492Z","serverPicoseconds":897000000},{"value":{"dataType":"Boolean","arrayType":"Scalar","value":false},"statusCode":{"value":0},"sourceTimestamp":"2022-09-13T05:29:42.492Z","sourcePicoseconds":997100000,"serverTimestamp":"2022-09-13T05:29:42.492Z","serverPicoseconds":997100000}]

```

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [1 February 2023 10:16 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/6 "2023-02-01T10:16:24Z")

</div>

I see no problem (NR 3.0.2).

Nor do I see any data element called DataValue.  
Can you show us the code that produces this output?  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/0/c/0cb03d86b201b93fed68ea291e6bc63d9379d1c3.png)

What do you mean by " access a single object directly"?

---

<div class="post-metadata">

**Author:** ![fabi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/fabi/32/76122_2.png) [@fabi](https://discourse.nodered.org/u/fabi)\
**Post date:** [1 February 2023 10:21 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/7 "2023-02-01T10:21:50Z")

</div>

By acces a single object directly i mean msg.payload[1] instead of the whole array msg.payload. This is the Flow:

```auto
[{"id":"97628b22cec87e27","type":"tab","label":"OPCUA Excample","disabled":false,"info":"","env":[]},{"id":"c0bad6bc2c4de37a","type":"function","z":"97628b22cec87e27","name":"serialize","func":"let outputArr = msg.out;\nmsg = [outputArr];\n\nnode.warn(msg)\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":180,"wires":[["10e5cce26a093390"]]},{"id":"f9c934ec5832f40b","type":"function","z":"97628b22cec87e27","name":"create target array","func":"\nconst targetArray = [\"ns=3;s=\\\"DB_OPCUA\\\".\\\"Roboter2\\\".\\\"Ampel\\\".\\\"rot\\\"\", \"ns=3;s=\\\"DB_OPCUA\\\".\\\"BinPicking\\\".\\\"Ampel\\\".\\\"gelb\\\"\"]\n\nconst outputArray = targetArray.map(elem => {\n return {\n topic: elem.toString()\n }\n})\n\nmsg.out = outputArray;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":290,"y":180,"wires":[["c0bad6bc2c4de37a"]]},{"id":"667ae29a94ccd7d3","type":"inject","z":"97628b22cec87e27","name":"","props":[],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":110,"y":180,"wires":[["f9c934ec5832f40b"]]},{"id":"10e5cce26a093390","type":"OpcUa-Client","z":"97628b22cec87e27","endpoint":"d36ff8a2b9f61387","action":"readmultiple","deadbandtype":"a","deadbandvalue":1,"time":10,"timeUnit":"s","certificate":"n","localfile":"","localkeyfile":"","securitymode":"None","securitypolicy":"None","folderName4PKI":"","name":"","x":700,"y":180,"wires":[["0c48a5bbf1a793bb"]]},{"id":"0c48a5bbf1a793bb","type":"function","z":"97628b22cec87e27","name":"output","func":"node.warn(msg.payload)\nnode.warn(msg.payload[1])","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":910,"y":180,"wires":[[]]},{"id":"d5f0659805b3e9c4","type":"function","z":"97628b22cec87e27","name":"readmultiple","func":"msg.payload = \"ALL\";\nmsg.topic = \"readmultiple\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":470,"y":260,"wires":[["10e5cce26a093390"]]},{"id":"27dff7c1a8644d14","type":"inject","z":"97628b22cec87e27","name":"","props":[],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":270,"y":260,"wires":[["d5f0659805b3e9c4"]]},{"id":"d36ff8a2b9f61387","type":"OpcUa-Endpoint","endpoint":"opc.tcp://192.168.1.110:4840","secpol":"None","secmode":"None","login":false}]

```

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [1 February 2023 10:30 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/8 "2023-02-01T10:30:05Z")

</div>

I'm leaning towards some overload on the node internally.  
it uses the `flatted` package - that does some stuff to aid in JSON structures.

its quite possible - when Node RED is parsing it - the node is overloading something, to produce the output.

doesn't explain when debugging `payload` though.

> <https://github.com/mikakaraila/node-red-contrib-opcua/blob/b01ee4ae05dfd4d200a64fc5c405a57b22435803/opcua/102-opcuaclient.js#L49>

very strange 🤷‍♂️  
I tested under 2.2.2 - and I don't get the same problem

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [1 February 2023 10:36 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/9 "2023-02-01T10:36:29Z")

</div>

Using the data you posted and your "output" function  
 ![Untitled 1](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/b/a/ba52903c808c761e12216c9f618c6ad9aab0ac6e.jpeg)

```auto
[{"id":"f76632171fc65c2e","type":"inject","z":"afdab898a6a23bf5","name":"Fabi's array","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[{\"value\":{\"dataType\":\"Boolean\",\"arrayType\":\"Scalar\",\"value\":true},\"statusCode\":{\"value\":0},\"sourceTimestamp\":\"2022-09-13T05:29:42.492Z\",\"sourcePicoseconds\":897000000,\"serverTimestamp\":\"2022-09-13T05:29:42.492Z\",\"serverPicoseconds\":897000000},{\"value\":{\"dataType\":\"Boolean\",\"arrayType\":\"Scalar\",\"value\":false},\"statusCode\":{\"value\":0},\"sourceTimestamp\":\"2022-09-13T05:29:42.492Z\",\"sourcePicoseconds\":997100000,\"serverTimestamp\":\"2022-09-13T05:29:42.492Z\",\"serverPicoseconds\":997100000}]","payloadType":"jsonata","x":210,"y":100,"wires":[["8c3b3cb619a849ad"]]},{"id":"1d0a83ed83fd300f","type":"debug","z":"afdab898a6a23bf5","name":"debug 257","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":530,"y":100,"wires":[]},{"id":"8c3b3cb619a849ad","type":"function","z":"afdab898a6a23bf5","name":"output","func":"node.warn(msg.payload)\nnode.warn(msg.payload[1])","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":100,"wires":[["1d0a83ed83fd300f"]]}]

```

I get this

 ![Untitled 2](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/6/0/60b7fb2b50f1a274eb980321f7271aca24bf9ca0.jpeg)

What does this flow output for you?

---

<div class="post-metadata">

**Author:** ![fabi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/fabi/32/76122_2.png) [@fabi](https://discourse.nodered.org/u/fabi)\
**Post date:** [1 February 2023 10:38 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/10 "2023-02-01T10:38:08Z")

</div>

With your flow i get the exact same output as you.

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [1 February 2023 10:40 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/11 "2023-02-01T10:40:37Z")

</div>

Then perhaps a debug node set to show the complete message coming out of your opcua node might shed some light?

I think @marcus-j-davies knows more about this than me since I don't use opcua.

---

<div class="post-metadata">

**Author:** ![fabi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/fabi/32/76122_2.png) [@fabi](https://discourse.nodered.org/u/fabi)\
**Post date:** [1 February 2023 10:43 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/12 "2023-02-01T10:43:50Z")

</div>

that is the complete message of the opcua node after i read the stored nodeIds

```auto
{"topic":"ALL","payload":[{"value":{"dataType":"Boolean","arrayType":"Scalar","value":true},"statusCode":{"value":0},"sourceTimestamp":"2022-09-13T06:10:17.878Z","sourcePicoseconds":972500000,"serverTimestamp":"2022-09-13T06:10:17.878Z","serverPicoseconds":972500000},{"value":{"dataType":"Boolean","arrayType":"Scalar","value":false},"statusCode":{"value":0},"sourceTimestamp":"2022-09-13T06:10:17.879Z","sourcePicoseconds":113400000,"serverTimestamp":"2022-09-13T06:10:17.879Z","serverPicoseconds":113400000}],"items":[{"nodeId":"ns=3;s=\"DB_OPCUA\".\"Roboter2\".\"Ampel\".\"rot\"","attributeId":13,"TimestampsToReturn":2},{"nodeId":"ns=3;s=\"DB_OPCUA\".\"BinPicking\".\"Ampel\".\"gelb\"","attributeId":13,"TimestampsToReturn":2}],"_msgid":"4cc97809d157ba26"}

```

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [1 February 2023 10:51 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/13 "2023-02-01T10:51:14Z")

</div>

I don't see any problem when I feed that payload into your output node, sorry.

---

<div class="post-metadata">

**Author:** ![fabi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/fabi/32/76122_2.png) [@fabi](https://discourse.nodered.org/u/fabi)\
**Post date:** [1 February 2023 10:52 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/14 "2023-02-01T10:52:10Z")

</div>

Thank you anyways for your help and your time!

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [1 February 2023 10:52 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/15 "2023-02-01T10:52:11Z")

</div>

I'm pretty sure, the node is overloading the output during `stringify`.

The below demos it - it doesn't fully explain the behaviour, but its all I have.

```auto
[{"id":"a7efc2d9be2f1751","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"1cd906e5aef9b6b5","type":"inject","z":"a7efc2d9be2f1751","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":165,"y":150,"wires":[["0ed656291449cc9b"]]},{"id":"0ed656291449cc9b","type":"function","z":"a7efc2d9be2f1751","name":"Array","func":"return {\n \"topic\": \"ALL\",\n \"payload\": [\n {\n toJSON: function(){\n return{\n payload: \"Not what you expect\"\n }\n },\n \"value\": {\n \"dataType\": \"Boolean\",\n \"arrayType\": \"Scalar\",\n \"value\": true\n },\n \"statusCode\": {\n \"value\": 0\n },\n \"sourceTimestamp\": \"2022-09-13T06:10:17.878Z\",\n \"sourcePicoseconds\": 972500000,\n \"serverTimestamp\": \"2022-09-13T06:10:17.878Z\",\n \"serverPicoseconds\": 972500000\n },\n {\n \"value\": {\n \"dataType\": \"Boolean\",\n \"arrayType\": \"Scalar\",\n \"value\": false\n },\n \"statusCode\": {\n \"value\": 0\n },\n \"sourceTimestamp\": \"2022-09-13T06:10:17.879Z\",\n \"sourcePicoseconds\": 113400000,\n \"serverTimestamp\": \"2022-09-13T06:10:17.879Z\",\n \"serverPicoseconds\": 113400000\n }\n],\n \"items\": [\n {\n \"nodeId\": \"ns=3;s=\\\"DB_OPCUA\\\".\\\"Roboter2\\\".\\\"Ampel\\\".\\\"rot\\\"\",\n \"attributeId\": 13,\n \"TimestampsToReturn\": 2\n },\n {\n \"nodeId\": \"ns=3;s=\\\"DB_OPCUA\\\".\\\"BinPicking\\\".\\\"Ampel\\\".\\\"gelb\\\"\",\n \"attributeId\": 13,\n \"TimestampsToReturn\": 2\n }\n],\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":235,"y":340,"wires":[["3d6261a6c24b0a21"]]},{"id":"3d6261a6c24b0a21","type":"function","z":"a7efc2d9be2f1751","name":"node warn (0)","func":"node.warn(msg.payload[0])","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":465,"y":340,"wires":[[]]}]

```

---

<div class="post-metadata">

**Author:** ![fabi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/fabi/32/76122_2.png) [@fabi](https://discourse.nodered.org/u/fabi)\
**Post date:** [1 February 2023 11:57 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/16 "2023-02-01T11:57:29Z")

</div>

Thank you also for your answer. My temporary solution is to do `node.warn(msg.payload[1].toJSON())`  
to get the expected result.

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/c/6/c6ca426dfdca5984775b207a576b59a2288fcf97.png)

---

<div class="post-metadata">

**Author:** ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)\
**Post date:** [1 February 2023 17:04 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/17 "2023-02-01T17:04:04Z")

</div>

Are you actually using node-red and not some kind of variant ?

---

<div class="post-metadata">

**Author:** ![fabi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/fabi/32/76122_2.png) [@fabi](https://discourse.nodered.org/u/fabi)\
**Post date:** [2 February 2023 05:57 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/18 "2023-02-02T05:57:07Z")

</div>

I am using it in a Docker Container but should be the normal version of Node-RED.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [3 April 2023 05:57 UTC](https://discourse.nodered.org/t/strange-array-object-behaviour-datavalue/74463/19 "2023-04-03T05:57:09Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
