2016-07-01 2 views
0

Мне было интересно, существует ли максимальная глубина адресации для форматированных файлов json в узловом красном.Сколько вложенных опций может обрабатывать узел-красный?

Например, у меня есть сообщение, как это

{ topic: 'i/devices/i/up', 
payload: 
{ payload: 'oo', 
    port: 2, 
    counter: 54, 
    metadata: 
    [ { frequency: 868.3, 
     datarate: 'SF12BW125', 
     codingrate: '4/5', 
     gateway_timestamp: 4201744244, 
     channel: 1, 
     server_time: '2016-07-01T09:50:39.725658999Z', 
     rssi: -63, 
     lsnr: 8.2, 
     rfchain: 1, 
     crc: 1, 
     modulation: 'LORA', 
     gateway_eui: 'oo', 
     altitude: 0, 
     longitude: 0, 
     latitude: 0 } ] }, 
qos: 2, 
retain: false, 
_msgid: '81960b41.7e69f8', 
metadata: <Buffer 00> } 

если я тусклый, чтобы получить метаданные вариант, я адресовал его внутри функции в узле красный как

msg.payload.rssi = msg.payload.metadata["rssi"]; 
return msg; 

Однако, когда я присоединяю к нему функцию отладки, я не получаю значение rssi, которое я хочу, что я делаю неправильно? Не может ли такое поле быть адресовано?

Заранее спасибо

С уважением

ответ

0

Там нет ограничений на глубину объекта JSON вы получаете доступ.

Вы упустили указатель массива из селектора.

Что вам нужно:

msg.payload.rssi = msg.payload.metadata[0].rssi; 
return msg; 

Это происходит потому, что объект метаданных представляет собой массив таким образом может содержать несколько экземпляров объектов метаданных.

Также имейте в виду, что вкладка отладки в редакторе Node-RED будет усекать более длинные объекты, если вам нужно увидеть весь объект, проще всего проверить поле «вывод на консоль», и все сообщение будет напечатано на консоль.

+0

спасибо, в случае, если было несколько элементов метаданных, мне нужно создать итератор, можно ли узнать количество элементов для итератора? – ndarkness

+0

Да, вы можете написать цикл for и использовать 'msg.payload.metadata.length', чтобы узнать, сколько элементов в массиве – hardillb

Смежные вопросы