JSON、XML、ZIP、加密与正则表达式
Apex 提供完整的 JSON 序列化/反序列化、XML 流和 DOM 处理、ZIP 压缩、Crypto 数据安全、Encoding 编码和 Pattern/Matcher 正则表达式支持。所有 JSON 方法可能抛出 JSONException。
JSON 支持:概述与类
三个核心类:System.JSON(往返序列化/反序列化——serialize/deserialize/deserializeUntyped/deserializeStrict)、System.JSONGenerator(标准 JSON 编码增量生成)、System.JSONParser(JSON 解析器——基于 Token 的流式解析)。支持 sObject、Apex 原始/集合类型、Database 方法返回类型、Apex 类实例。
序列化注意事项:仅自定义对象(托管包 sObject 类型)可从外部代码序列化——托管包 Apex 类实例不可。Map 仅特定键类型可序列化(Boolean/Date/DateTime/Decimal/Double/Enum/Id/Integer/Long/String/Time)。父类型引用子类型实例时子类型字段丢失。自引用对象抛 JSONException。API 28.0+:查询 sObject 的额外字段包含在序列化中;null 字段不序列化。API 63.0+:自定义异常不可序列化。API 34.0 及更早:ID 往返 JSON 后 == 比较失败。聚合查询结果不可反序列化回 AggregateResult。
JSONGenerator:增量 JSON 创建
JSON.createGenerator(prettyPrint) 创建生成器。方法:writeStartObject/writeEndObject(对象边界)、writeNumberField/writeStringField/writeBooleanField/writeDateField/writeDateTimeField(字段)、writeFieldName(字段名)、writeObject/writeObjectField(嵌入对象或字段对象)、writeStartArray/writeEndArray(数组)。getAsString() 获取生成的 JSON 字符串。
JSONGenerator gen = JSON.createGenerator(true);
gen.writeStartObject();
gen.writeNumberField('abc', 1.21);
gen.writeStringField('def', 'xyz');
gen.writeFieldName('ghi');
gen.writeStartObject();
gen.writeObjectField('aaa', new List<Integer>{1, 2, 3});
gen.writeEndObject();
gen.writeEndObject();
String pretty = gen.getAsString();
JSONParser:Token 流式解析
JSON.createParser(jsonString) 创建解析器。使用 nextToken() 遍历 Token——getCurrentToken() 返回 JSONToken 枚举(START_OBJECT/END_OBJECT/START_ARRAY/END_ARRAY/FIELD_NAME/VALUE_STRING/VALUE_NUMBER/VALUE_TRUE/VALUE_FALSE/VALUE_NULL)。getText() 获取字段名或值。readValueAs(Type.class) 将当前对象反序列化为指定 Apex 类型。skipChildren() 跳过子对象。
JSONParser parser = JSON.createParser(jsonStr);
while (parser.nextToken() != null) {
if (parser.getCurrentToken() == JSONToken.START_ARRAY) {
while (parser.nextToken() != null) {
if (parser.getCurrentToken() == JSONToken.START_OBJECT) {
Invoice inv = (Invoice) parser.readValueAs(Invoice.class);
parser.skipChildren();
}
}
}
}
XML 支持:流读取与写入
XmlStreamReader:前向只读 XML 数据访问——最多 50 节点深嵌套。XML 事件类型:START_ELEMENT/END_ELEMENT/CHARACTERS/COMMENT/START_DOCUMENT/END_DOCUMENT/ENTITY_REFERENCE。使用 hasNext()+next() 遍历。方法:getLocalName()(元素名)、getAttributeValue(ns, name)、getText()、getNamespace()。
XmlStreamWriter:写入 XML——writeStartDocument/writeStartElement(含命名空间前缀和 URI)/ writeNamespace/writeAttribute/writeCharacters/writeCData/writeEmptyElement/writeEndElement/writeEndDocument。getXmlString() 获取输出。
XML 支持:DOM 解析
Dom.Document 类处理 XML 内容——常用于构建 HttpRequest 请求体或解析 HttpResponse。方法:createRootElement(name, ns, prefix)、getRootElement()、toXmlString()。Dom.XmlNode 类——getChildElement(name, ns)/getChildElements()/addChildElement/getText()/setNamespace/setAttributeNS。XML 命名空间:prefix:localName 格式——映射到 URI。XmlNodeType 枚举:COMMENT/ELEMENT/TEXT。元素 vs 节点区别:XML <name>Suvain</name> 含 1 个元素节点(name) + 1 个文本节点(Suvain)。
ZIP 支持与 Crypto 数据安全
Compression 命名空间——ZIP 压缩/解压:ZipReader 类(getEntry(name) 获取条目 + extractEntry(entry) 提取为 Blob)。典型用例:从 callout 响应提取 ZIP 存档中的翻译文件。
Crypto 类——数据安全:生成摘要(generateDigest(algorithm, data)——SHA1/SHA256/SHA512/MD5)、生成 MAC(generateMac(algorithm, data, key)——HMacSHA1/HMacSHA256)、生成签名(sign(algorithm, data, key)——RSA 等)、加密解密(encryptWithManagedIV/decryptWithManagedIV——AES128/AES192/AES256 由 Salesforce 管理初始化向量)、generateAesKey(size) 生成私钥。典型用例:AWS 集成(HMacSHA1 签名的 REST 请求)、AES 加密解密测试(必须使用相同密钥大小解密)。
Encoding 工具
EncodingUtil 类——URL 编码/解码(urlEncode(str, encoding)/urlDecode)、Base64 编码/解码(base64Encode(blob)/base64Decode(str))、十六进制转换(convertToHex(blob)——常用于 HTTP Digest 认证响应计算)、convertFromHex(str)。典型用例:HTTP Digest 认证中计算十六进制 SHA1 摘要。
Pattern 和 Matcher:正则表达式
基于 Java 标准——Pattern(编译正则表达式)和 Matcher(执行匹配操作)。创建流程:Pattern.compile(regex) → pattern.matcher(input)。一次性使用:Pattern.matches(regex, input) 直接返回 Boolean。限制:输入序列最多访问 1,000,000 次——超出抛运行时错误。
匹配操作:matches()(匹配整个区域)、lookingAt()(从开始匹配无需整个区域)、find()(扫描下一个匹配子序列)。结果方法:start()/end()(匹配位置)、group()/group(n)(匹配子序列/捕获组)。区域:region(start, end) 限制搜索范围——默认整个输入。anchoring bounds(默认——^$ 匹配区域边界)vs transparent bounds(搜索区域外文本)。捕获组:从左到右按开括号编号——Group 0 = 整个表达式。典型用例:邮件地址正则化(去除子域名/TLD 变体检测重复)、HTML 标签替换。
JSON/XML 序列化、ZIP 压缩、Crypto 加密和 Pattern 正则表达式——Apex 提供了完整的工具链处理各种数据格式和安全需求。