JavaScript 向JSON结构新增数组元素时如何避免多余转义字符
问题根源
你当前的代码是把JSON格式的字符串直接作为元素传入数组的push()方法:单引号包裹的内容在JS里是普通字符串值,不是结构化对象。当后续执行JSON.stringify序列化时,会把这个值按普通字符串规则处理:给整个字符串外层包裹双引号、对字符串内部的双引号自动加反斜杠转义,最终就会出现和数组原有对象条目格式不一致的异常输出。
修正方案
根据你的新增条目来源,选以下对应写法即可:
手写新增结构时优先用的写法:直接传JS对象字面量,不要把结构写成字符串
把原本写在单引号里的JSON内容,改成不带外层引号的JS对象结构,JS会在序列化时自动生成符合规范的JSON格式,和原有条目格式完全统一:var obj = JSON.parse(jsoncontent); obj["subnets"]["values"].push({ gateway: "2.2.2.2", prefixLength: 24, dnsSuffix: null, dnsServer1: "", dnsServer2: "", ipRanges: { values: [] }, enabled: false, totalIpCount: 0, usedIpCount: null, primaryIp: null, autoAllocateIpRanges: false }); alert(JSON.stringify(obj, null, '\t'));注:JS对象的键名不需要强制添加双引号,
JSON.stringify会自动将其转成JSON规范要求的双引号包裹格式,和原有条目无差异。新增内容为外部传入的现成JSON字符串时的写法:先解析字符串为对象再push
如果待新增的内容本身是从其他接口、变量拿到的现成JSON字符串,就先通过JSON.parse()把字符串转成结构化对象,再传入push(),不要直接传原始字符串:// newSubnetStr是待新增的JSON格式字符串 var newSubnetStr = '{"gateway": "2.2.2.2","prefixLength": 24,"dnsSuffix": null,"dnsServer1": "","dnsServer2": "","ipRanges": {"values": []},"enabled": false,"totalIpCount": 0,"usedIpCount": null,"primaryIp": null,"autoAllocateIpRanges": false}'; obj["subnets"]["values"].push(JSON.parse(newSubnetStr));
内容的提问来源于stack exchange,提问作者Legioon
相关产品推荐
相关产品推荐

