如何生成符合路由器要求的带点无引号非嵌套格式的配置键?
非标准类JSON配置生成方案
你需要的link.b : {格式不属于标准JSON语法,默认的JSON序列化工具无法直接输出该格式,需要自定义字符串拼接逻辑实现,常用实现方案如下:
- 核心思路:先序列化
link.b对应的内部配置项,再手动拼接顶层的link.b : {头和闭合尾,规避标准序列化的自动加引号/自动嵌套逻辑。
Python 实现示例
import json # 定义link.b对应的所有配置参数 link_b_params = { "en": 0x1f, "an": 0x1f, "spdc": [0x0,0x00,0x00,0x00,0x00,0x00], "dpxc": 0x1f, "fct": 0x0, "fp1": 0x3e, "fp2": 0x3d, "fp3": 0x3b, "fp4": 0x37, "fp5": 0x2f, "fp6": 0x1f, "lck": 0x0, "lckf": 0x0, "imr": 0x0, "omr": 0x0, "mrto": 0x1, "vlan": [0x1,0x01,0x01,0x01,0x01,0x01], "vlnh": [0x0,0x00,0x00,0x00,0x00,0x00], "vlni": [0x0,0x00,0x00,0x00,0x00,0x00], "dvid": [0x1,0x000b,0x000b,0x000a,0x000b,0x0001], "fvid": 0x0, "ir": [0x0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000], "or": [0x0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000], "srt": [0x0,0x00,0x00,0x00,0x00,0x00], "suni": 0x0, "poe": [0x1,0x02,0x02,0x02,0x02,0x00], "prio": [0xff,0x00,0x01,0x02,0x03,0x00], "nm0": "506f727431", "nm1": "506f727432", "nm2": "506f727433", "nm3": "343033", "nm4": "343039" } # 序列化内部参数,去除默认生成的外层大括号 inner_content = json.dumps(link_b_params, indent=2).lstrip("{").rstrip("}") # 自定义拼接顶层键 final_config = f"link.b : {{{inner_content}}}" print(final_config)
Node.js 实现示例
const linkBParams = { en: 0x1f, an: 0x1f, spdc: [0x0,0x00,0x00,0x00,0x00,0x00], // 其余参数同上述示例补全即可 } // 序列化内部内容后替换外层大括号 const innerContent = JSON.stringify(linkBParams, null, 2).replace(/^\{/, '').replace(/\}$/, '') const finalConfig = `link.b : {${innerContent}}` console.log(finalConfig)
注意事项
- 如果需要保留十六进制数值格式,不要直接使用默认JSON序列化,需要自定义数值格式化逻辑,将数值手动转为
0x${数值.toString(16)}格式后再拼接。 - 如果有多个同级的带点键(如
link.a、link.c),按照同样逻辑逐个拼接即可,不同配置项之间添加逗号分隔。 - 生成完成后建议和路由器官方示例配置做逐字符对比,确认缩进、符号格式完全匹配,避免识别失败。
内容的提问来源于stack exchange,提问作者Ryan de Kock
相关产品推荐
相关产品推荐

