Java Spring Boot如何从字符串解析二维数组并提取payload JsonObject
解决步骤
你遇到的问题核心是两层序列化转义的嵌套结构,以及取值方式错误导致无法解析数组,按以下步骤实现即可:
核心错误修正
你当前调用.toString()获取args值的方式会给原始字符串额外包裹双引号,导致原本合法的JSON数组字符串变成普通字符串,无法直接解析为数组,需要改用getAsString()直接获取字段原生值。
完整实现代码
import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; // 假设originalJsonObject为接口返回的原始JSON对象 public JsonObject extractPayload(JsonObject originalJsonObject) { // 1. 拿到args字段的原始字符串值 String argsRawStr = originalJsonObject.get("args").getAsString(); // 2. 解析为二维JSON数组 JsonArray argsArray = JsonParser.parseString(argsRawStr).getAsJsonArray(); // 3. 取第三个数组元素的第一个值,即payload外层包装串 String wrapperStr = argsArray.get(2).getAsJsonArray().get(0).getAsString(); // 4. 解析外层包装对象,拿到payload的序列化字符串 String payloadRawStr = JsonParser.parseString(wrapperStr).getAsJsonObject().get("payload").getAsString(); // 5. 解析得到最终payload对象 return JsonParser.parseString(payloadRawStr).getAsJsonObject(); }
注意事项
- 若
args数组的索引位置可能变动,可以加判空和下标越界校验,避免运行时崩溃。 - 不要用正则表达式直接匹配payload内容,JSON转义场景下正则极易出现匹配错误,用Gson逐层解析是最稳定的方案。
内容的提问来源于stack exchange,提问作者Random_dude
相关产品推荐
相关产品推荐

