JavaScript中如何构造正确格式的嵌套结构Payload?
问题描述
我尝试了以下代码但无法正常运行:
let sourceIPAddress = "10.255.0.8/32" let destinationIPAddress = "10.255.0.0/32/32" let filterAddValue = `{'filter-name':'SessionFilter','source-ip': '${sourceIPAddress}','destination-ip':'${destinationIPAddress}'}` const filterAdd = { "filter-add":filterAddValue } const filterAddStringify = JSON.stringify(filterAdd);
运行后返回错误信息:"error-message": "No default namespace has been defined."
生成的错误Payload如下:
错误Payload
{"filter-add": "{'filter-name':'SessionFilter','source-ip': '10.255.0.8/32','destination-ip':'10.255.0.0/32'}"}
该Payload中filter-add的值是被双引号包裹的字符串,而正确的Payload要求filter-add的值为嵌套对象,格式如下:
正确Payload
{"filter-add":{"filter-name":"SessionFilter","source-ip":"10.255.0.8/32","destination-ip":"10.255.0.0/32"}}
请问如何在JavaScript中生成完全符合上述正确格式的Payload?
解决方案
问题根源是你手动拼接了JSON格式的字符串,导致filter-add的值被识别为字符串类型,而非嵌套对象。正确做法是直接构造JavaScript嵌套对象,再用JSON.stringify()序列化,即可生成标准的目标Payload。
修改后的代码如下:
let sourceIPAddress = "10.255.0.8/32"; let destinationIPAddress = "10.255.0.0/32"; // 原代码中多了一个冗余的/32,这里做了修正 // 直接构造嵌套结构的对象 const filterAdd = { "filter-add": { "filter-name": "SessionFilter", "source-ip": sourceIPAddress, "destination-ip": destinationIPAddress } }; const filterAddStringify = JSON.stringify(filterAdd);
关键说明
- 放弃手动拼接字符串的方式,直接用JavaScript对象结构映射目标Payload的层级,
filter-add字段的值是一个嵌套对象。 JSON.stringify()会自动将对象序列化为标准JSON格式,自动用双引号包裹所有键和字符串值,完全匹配正确Payload的格式要求。
内容的提问来源于stack exchange,提问作者user2459924
相关产品推荐
相关产品推荐

