如何发送无转义符的含引号JSON字符串至服务器?
嘿,这个转义符的坑我太熟了!本质上你是把代码里的字符串字面量和实际要传输的JSON内容搞混了——你看到的\"只是代码里用来表示真实双引号的写法,真正发去服务器的应该是不带转义的纯JSON。下面分几种常见场景给你解决办法:
1. 用语言自带的JSON序列化工具(最推荐,零出错)
别手动拼字符串!直接构造对象,让语言的JSON工具帮你处理引号:
- JavaScript/Node.js:
// 先创建普通对象 const data = { property1: false, property2: "orange" }; // 序列化为标准JSON字符串 const jsonString = JSON.stringify(data); // 发送时直接用这个字符串,它的内容就是 {"property1":false,"property2":"orange"} fetch('/your-api-endpoint', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: jsonString }); - Python:
import json import requests data = {"property1": False, "property2": "orange"} # 直接用requests的json参数,它会自动序列化并设置请求头 requests.post('https://your-server.com/api', json=data) # 如果要手动序列化: # json_string = json.dumps(data) # requests.post('https://your-server.com/api', data=json_string, headers={'Content-Type': 'application/json'}) - Java:
import com.fasterxml.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; public class JsonExample { public static void main(String[] args) throws Exception { Map<String, Object> data = new HashMap<>(); data.put("property1", false); data.put("property2", "orange"); ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(data); // 用HttpClient发送jsonString,记得设置Content-Type为application/json } }
2. 如果你非要手动拼接字符串(不推荐,容易踩坑)
如果特殊情况必须手动写JSON字符串,要注意:你在代码里写的\"只是告诉编译器“这是一个普通双引号”,实际运行时字符串内容里是没有\的。比如在JavaScript里,你可以用console.log("{\"property1\": false, \"property2\": \"orange\"}")看看,输出的就是不带转义的JSON。如果发送后服务器还是收到转义符,大概率是你重复序列化了(比如又调用了一次JSON.stringify)。
3. 务必设置正确的请求头
发送请求时一定要把Content-Type设为application/json,很多服务器会根据这个头自动解析JSON内容;如果没设置,服务器可能把它当成普通字符串,导致转义符被错误保留。
总结一下:永远优先用语言自带的JSON序列化工具,别手动拼JSON,这是避开转义问题最省心的办法。
内容的提问来源于stack exchange,提问作者chr0x
相关产品推荐
相关产品推荐

