【问题标题】:node-red parsing a json string to msg.payloadnode-red 将 json 字符串解析为 msg.payload
【发布时间】:2017-07-06 09:32:37
【问题描述】:

菜鸟问题

我正在使用 snmp 函数通过 oid 列表收集数据。 我已提取数据并使用 json 函数将数据解析为如下所示的 json 字符串。

msg.payload : 字符串[81] "[{"oid":"1.3.6.1.4.1.38783.3.3.1.1.1.0","type":2,"value":53800,"tstr":"Integer"}]"

我正在尝试编写一个函数来从该字符串中去除"value":53800 并将其输出到msg.payload

我在下面尝试过,但它返回了

"TypeError: 无法分配给'_msgid' 的只读属性"value":53700,"tstr":"Integer"}]"

var msg = msg.payload;
var value = msg.substr(49,62);

return value;

【问题讨论】:

    标签: javascript json string split node-red


    【解决方案1】:

    不要尝试像那样拆分字符串,如果值长度发生变化,很容易出错。

    而是在函数节点之前通过 JSON 节点运行消息。

    这将解析字符串并生成正确的 JSON 对象。

    然后您可以像这样访问值字段:

    var value = msg.payload[0].value;
    msg.payload = value;
    return msg;
    

    Cannot assign to read only property 错误是因为您从函数返回了一个字符串。您需要返回消息 JSON 对象而不是字符串。我的示例将msg.payload 设置为所需的值。

    【讨论】:

    • 您好,感谢您的回答我已通过 json 节点传递它并进行了您建议的更改,现在我收到了 msg.payload:未定义错误?再次感谢。
    • 编辑原始问题以准确显示您所做的工作。
    【解决方案2】:

    对于您的 JSON,以下代码将在函数中起作用:

    var value = msg.payload.value;
    msg.payload = value;
    return msg;
    

    【讨论】:

    • 不,不会,您似乎忽略了 JSON 对象是一个数组的事实。事实上输入是一个字符串而不是一个对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多