如何在Node.js服务端解析input输入框中的JSON数据并处理报错
问题原因分析
核心问题是HTML属性引号与JSON内部引号冲突,导致浏览器解析input的value值时提前截断。
你提交的input代码为<input type="hidden" id="id" name="id" value="{"a":0.3,"b":0.5,"c":1.3}">,由于value属性使用双引号包裹,JSON内部的"会被浏览器识别为value属性的结束标记,最终浏览器认为该input的value值只有{,提交到服务端后request.body.id拿到的就是不完整的{字符串,执行JSON.parse("{")自然会抛出意外终止的语法错误。
解决方案
- 方案1:转义JSON内部的双引号
把JSON字符串序列化后,将所有双引号替换为HTML实体",再赋值给value属性,处理后的input代码应为:<input type="hidden" id="id" name="id" value="{"a":0.3,"b":0.5,"c":1.3}"> - 方案2:使用单引号包裹value属性
将value属性的包裹符号换成单引号,避免和JSON内部的双引号冲突:
注意如果JSON内容本身包含单引号,需要提前转义为<input type="hidden" id="id" name="id" value='{"a":0.3,"b":0.5,"c":1.3}'>\'。 - 方案3:通过JS API赋值
如果是前端动态生成input,不要手动拼接HTML字符串,使用setAttribute方法赋值,浏览器会自动处理转义逻辑:const obj = {a:0.3, b:0.5, c:1.3} document.getElementById('id').setAttribute('value', JSON.stringify(obj))
内容的提问来源于stack exchange,提问作者Thorben C.
相关产品推荐
相关产品推荐

