Apex类中如何使用变量设置setBody?
在Apex的setBody中使用变量替换固定JSON值的解决方法
方法1:直接字符串拼接
手动调整拼接逻辑,将固定值替换为变量并保留JSON要求的引号:
// 先定义并赋值目标变量 String variable1 = '1646149510'; String body = '{'+ '"query": {' + ' "value": "' + variable1 + '" ' + ' }' + ' }'; req.setBody(body);
注意:必须用"(转义双引号)包裹变量,否则生成的JSON格式会失效。
方法2:使用String.format格式化字符串
这种方式可读性更强,避免拼接时的符号混乱:
String variable1 = '1646149510'; // 用{0}作为变量占位符 String bodyTemplate = '{'+ '"query": {' + ' "value": "{0}" ' + ' }' + ' }'; // 传入变量数组替换占位符 String body = String.format(bodyTemplate, new List<String>{variable1}); req.setBody(body);
方法3:推荐使用JSON序列化(避免手动拼接错误)
手动拼接JSON容易出现格式疏漏,推荐通过对象或Map构建结构后序列化:
方式3.1:使用内部类
// 定义与JSON结构匹配的内部类 public class QueryRequestBody { public QueryDetail query; public class QueryDetail { public String value; } } // 构建请求体对象 String variable1 = '1646149510'; QueryRequestBody reqBody = new QueryRequestBody(); reqBody.query = new QueryRequestBody.QueryDetail(); reqBody.query.value = variable1; // 序列化为JSON字符串 String body = JSON.serialize(reqBody); req.setBody(body);
方式3.2:使用Map
如果不想定义类,可以用Map快速构建结构:
String variable1 = '1646149510'; Map<String, Object> bodyMap = new Map<String, Object>{ 'query' => new Map<String, Object>{ 'value' => variable1 } }; String body = JSON.serialize(bodyMap); req.setBody(body);
常见失败原因
你之前替换失败大概率是以下情况:
- 没有给变量包裹JSON所需的双引号(转义后为
"),导致生成的JSON格式非法 - 字符串拼接时符号错误(比如遗漏
+号或引号),引发语法错误
内容的提问来源于stack exchange,提问作者tomilaser1
相关产品推荐
相关产品推荐

