获取JSON array类型outbound响应负载大小遇报错:java.lang.String无size()方法
解决"Method size() cannot be found on java.lang.String type"错误
嘿,这个问题我太熟悉了!你碰到的这个错误本质特别好理解——你把JSON数组格式的字符串当成了Java里的数组/集合对象去调用size()方法,但Java的String类根本没有size()这个方法,编译器当然会直接给你报错啦。
错误根源
你获取到的outbound响应负载其实是java.lang.String类型(也就是纯文本格式的JSON),而不是Java原生的List或者JSON库提供的JsonArray这类集合对象。直接对字符串调用size()是行不通的,因为String类只有length()方法用来获取字符串的字符长度,不是你要的数组元素个数。
两种常见解决方案
根据你是否使用第三方JSON库,这里给你两种常用的处理方式:
方案1:用Java原生API解析(无需第三方库)
如果你不想引入额外依赖,可以用Java EE自带的javax.json包来解析:
import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonReader; import java.io.StringReader; // 假设responsePayload是你拿到的JSON数组字符串 String responsePayload = "[{\"id\":1}, {\"id\":2}, {\"id\":3}]"; // 将字符串解析为JsonArray对象 JsonReader reader = Json.createReader(new StringReader(responsePayload)); JsonArray jsonArray = reader.readArray(); reader.close(); // 现在可以正常调用size()获取数组元素个数 int arraySize = jsonArray.size(); System.out.println("JSON数组的元素个数:" + arraySize);
方案2:用Gson/Jackson这类流行JSON库(更推荐)
实际开发中,大家更常用Gson或Jackson来处理JSON,代码更简洁:
用Gson的示例:
import com.google.gson.Gson; import com.google.gson.JsonArray; String responsePayload = "[{\"name\":\"Alice\"}, {\"name\":\"Bob\"}]"; Gson gson = new Gson(); // 直接把字符串解析为JsonArray JsonArray jsonArray = gson.fromJson(responsePayload, JsonArray.class); int size = jsonArray.size();
用Jackson的示例:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.JsonNode; String responsePayload = "[{\"age\":25}, {\"age\":30}]"; ObjectMapper objectMapper = new ObjectMapper(); // 先把字符串解析为JsonNode,再判断是否为数组 JsonNode jsonNode = objectMapper.readTree(responsePayload); if (jsonNode.isArray()) { int size = jsonNode.size(); System.out.println("数组元素个数:" + size); }
小提示
如果你的接口响应可能返回非数组类型(比如对象、null等),记得先做类型判断(比如Jackson里的isArray()),避免出现类型转换异常或者空指针问题哦。
内容的提问来源于stack exchange,提问作者Kiran Kumar
相关产品推荐
相关产品推荐

