课程章节介绍
好,同学们,咱们今天来看一看 Apex 里怎么解析 JSON 数据。JSON 这种格式大家现在应该不陌生了,前后端交互、调用外部 API,响应回来的很多都是 JSON。Salesforce 给咱们提供了一个特别好用的工具,叫 JSONParser。
这个 JSONParser 呢,主要支持两种解析思路,你可以根据场景来选。
第一种,我叫它“逐个令牌”的方式,也就是 token-by-token。怎么做呢?你先用 nextToken() 方法来初始化解析器,它会指向 JSON 里的第一个令牌。然后你可以在循环里,根据 JSONToken 这个枚举,检查当前令牌是什么类型——比如是不是字段名、是不是值、是不是一个数组的开始。用 getCurrentToken() 一看就知道了。如果当前令牌正好是字段名,那咱们再用 getText() 把字段名和它对应的值提取出来。这种方式很灵活,特别适合处理那些字段顺序可能不确定、或者你只需要部分数据的情况。而且它对字段名称的匹配也做得非常优雅,你代码写起来会很清爽。
第二种方法更直接,叫 readValueAs。你只要给它一个目标类型,它就能把一整个 JSON 对象直接反序列化成一个 Apex 类的实例。比如你有一个定义好属性的类,结构跟要解析的 JSON 对象正好对得上,那你一行代码就能把 JSON 变成对象。但前提是类的结构必须和 JSON 完全匹配,字段名、层级都得对应好,不然会报错。
咱们再讲一个很实用的小技巧:skipChildren()。当你在遍历一个 JSON 数组,读完一个完整的对象之后,如果这个对象里面还嵌套着子数组或者子对象,你不想一层层手动解析,skipChildren() 就能帮你直接跳过这些子元素,让你快速定位到下一个同级元素,这在处理对象数组的时候特别省事。
最后我举一个例子。假设你调用了一个收件箱相关的 API,返回的 JSON 里有很多版本信息。要求你从这个响应里提取出 API 版本号,构建出一个从版本号到发布标签的 Map。那你就可以用 token-by-token 的方式,定位到版本号和标签字段,灵活地把数据塞进 Map 里。或者如果你定义好了对应的 Apex 类,直接用 readValueAs 把整个响应映射成对象也挺省心。
所以,掌握好这两种方法,再加上 skipChildren() 的灵活运用,你处理绝大多数的 JSON 解析场景都会游刃有余。好,这部分就讲到这儿,大家有什么问题吗?
关键词
Apex
Salesforce
Developer Guide