Node.js后端如何清理Android API请求中的嵌套引号?
处理Android端发送的格式异常请求体数据
Android移动端向Node.js后端API发送的请求体格式如下:
{ "openingHour":['"02:00PM"','"03:00PM"'] }
后端仅使用JavaScript处理时,需要将数据转换为以下两种合法格式之一:
{ "openingHour":["02:00PM","03:00PM"] }
或者
{ "openingHour":['02:00PM','03:00PM'] }
解决方案
方法一:先处理原始字符串再解析
由于原始请求体不符合标准JSON格式(数组用单引号包裹,元素又嵌套双引号),默认的JSON.parse会解析失败。可以先获取原始请求的字符串,替换掉多余的引号后再解析:
以Express框架为例,先禁用默认的JSON解析器,获取原始请求体:
const express = require('express'); const app = express(); // 用raw中间件获取原始请求体 app.use(express.raw({ type: 'application/json' })); app.post('/your-api-endpoint', (req, res) => { try { // 将Buffer转为字符串 const rawBodyStr = req.body.toString(); // 方案1:把嵌套的双引号去掉,转为标准JSON格式 const cleanedStr = rawBodyStr.replace(/"'/g, '"').replace(/'"/g, '"'); // 或者方案2:把外层单引号保留,去掉内部双引号 // const cleanedStr = rawBodyStr.replace(/"'/g, "'").replace(/'"/g, "'"); const parsedData = JSON.parse(cleanedStr); res.json(parsedData); } catch (err) { res.status(400).send('请求体格式异常'); } });
方法二:用宽松JSON解析库处理后清理元素
如果不想手动处理字符串,可以使用支持宽松格式的JSON解析库(比如json5)先解析原始数据,再清理数组元素的多余引号:
- 先安装依赖:
npm install json5
- 编写处理代码:
const JSON5 = require('json5'); // 模拟原始请求体字符串 const rawBody = `{ "openingHour":['"02:00PM"','"03:00PM"'] }`; // 用JSON5解析宽松格式的JSON const parsedData = JSON5.parse(rawBody); // 清理数组元素首尾的双引号 parsedData.openingHour = parsedData.openingHour.map(item => { return item.replace(/^"|"$/g, ''); }); // 此时parsedData即为符合要求的格式 console.log(parsedData);
内容的提问来源于stack exchange,提问作者Keshav Suman
相关产品推荐
相关产品推荐

