如何从字符串格式JSON中提取特定值(不使用org.json相关实现)
不用org.json库提取JSON字符串特定值的实用方案
看起来你现在靠手动截取字符串、替换字符来处理JSON,但这种方式容错性太差了——比如JSON里多了个空格、键的顺序变了,或者结构稍微复杂一点,代码直接就失效了。我给你几个更靠谱的替代思路,都完全不用org.json那套工具:
方案一:用正则表达式精准匹配目标字段
如果你的JSON结构比较简单(比如就是单层键值对),正则表达式可以帮你精准定位目标字段的值,还能兼容格式上的小变化(比如键值之间的空格)。比如你要提取id字段的值,代码可以这么写:
String text = execution.getVariable("documents").toString(); // 匹配"id":"xxx"(字符串类型)或"id":123(数字类型),忽略键值间的空格 Pattern pattern = Pattern.compile("\"id\"\\s*:\\s*(?:\"([^\"]*)\"|(\\d+))"); Matcher matcher = pattern.matcher(text); if (matcher.find()) { // 优先取字符串类型的匹配结果,没有则取数字类型 String idValue = matcher.group(1) != null ? matcher.group(1) : matcher.group(2); System.out.println("提取到的id值:" + idValue); } else { System.out.println("未找到id字段"); }
方案二:用Java自带的Jackson Databind(灵活支持复杂结构)
如果你的项目能引入Jackson库(很多Java项目本身就依赖它),这会是最省心的方案——不用org.json,还能轻松处理嵌套JSON、数组等复杂结构。
先确保项目有Jackson依赖(以Maven为例):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 替换成最新稳定版本即可 --> </dependency>
然后用ObjectMapper把JSON转成Map,直接按键取值:
import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Map; // ... String text = execution.getVariable("documents").toString(); ObjectMapper objectMapper = new ObjectMapper(); try { // 将JSON字符串转为Map,直接通过键名获取对应值 Map<String, Object> jsonMap = objectMapper.readValue(text, Map.class); Object idValue = jsonMap.get("id"); System.out.println("提取到的id值:" + idValue); // 要提取其他字段的话,直接用jsonMap.get("字段名")即可 } catch (Exception e) { e.printStackTrace(); }
为什么不推荐手动截取字符串?
- 容错性极差:JSON里的空格、换行、键的顺序变化都会导致截取失败
- 扩展性差:如果之后要提取其他字段,或者JSON结构变复杂,需要写大量繁琐的
substring和replace代码,维护成本极高
内容的提问来源于stack exchange,提问作者beginer beginer
相关产品推荐
相关产品推荐

