JSON、XML、ZIP、加密与正则表达式完全指南

JSON/XML/ZIP/Crypto/Pattern完全指南:JSON(JSON.serialize+deserialize+deserializeStrict+deserializeUntyped/Map键类型限制11种/API28.0+null不序列化+额外字段序列化/API63.0+异常不序列化)、JSONGenerator(writeStartObject/字段/数组/prettyPrint)、JSONParser(JSONToken枚举10种/readValueAs/skipChildren)、XmlStreamReader(前向只读50节点深/hasNext+next/事件类型7种)、XmlStreamWriter(命名空间+属性+CData/空元素)、DOM(Document+XmlNode/createRootElement+addChildElement/getChildElements/XML命名空间/元素vs节点区别)、ZIP(Compression/ZipReader/getEntry+extractEntry)、Crypto(generateDigest+generateMac+sign+encryptWithManagedIV+decryptWithManagedIV+generateAesKey/AWS HMacSHA1集成)、EncodingUtil(urlEncode+base64Encode+convertToHex/HTTP Digest认证)、Pattern+Matcher(compile+matcher/matches+lookingAt+find/start+end+group/region+anchoring+transparent bounds/捕获组编号/1M访问限制/邮件正则化示例)。...

📅 2026/7/16 ✍️ ponybai 🏷️ apex, salesforce

JSON、XML、ZIP、加密与正则表达式

JSON支持

Apex 提供完整的 JSON 序列化/反序列化、XML 流和 DOM 处理、ZIP 压缩、Crypto 数据安全、Encoding 编码和 Pattern/Matcher 正则表达式支持。所有 JSON 方法可能抛出 JSONException

JSON 支持:概述与类

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 创建

JSONGenerator

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 流式解析

JSONParser

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 支持:流读取与写入

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/writeEndDocumentgetXmlString() 获取输出。

XML 支持:DOM 解析

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 数据安全

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 工具

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 提供了完整的工具链处理各种数据格式和安全需求。