You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字符串格式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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:14:06