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

如何仅用String.split从JSON片段提取ROUTE_UNIQUE_ID_REFERENCE值

如何仅用String.split从不完整JSON中提取ROUTE_UNIQUE_ID_REFERENCE的值?

嘿,我明白你的困境——因为API限制只能用String.split(),之前用Pattern和Matcher能成功提取值,但换成split就找不到目标结果了对吧?

为什么你之前的split代码没生效?

你之前写的正则是匹配整个键值对(比如"ROUTE_UNIQUE_ID_REFERENCE": "2172752",),但split()的核心逻辑是把匹配到的部分从原字符串中移除,剩下的内容拆分成数组元素。所以你的目标值2172752其实跟着匹配到的键值对一起被剔除了,自然在返回的数组里找不到它。

仅用split的最优解决方案

我们换个思路:先精准定位到目标键的位置,再分两步提取对应的值,逻辑清晰还高效:

package com.company;

public class Main {
    public static void main(String[] args) {
        String myString = "{\n" +
                " \"8\": [\n" +
                " {\n" +
                " \"TEST\": \"LN17ELJ\",\n" +
                " \"ROUTE_UNIQUE_ID_REFERENCE\": \"2172752\",\n" +
                " \"ORDER_UNIQUE_ID_REFERENCE\": \"109197634\",\n" +
                " \"STATUS\": \"HORLEY\",\n" +
                " \"SECONDARY_NAV_CITY\": \"HORLEY\",\n" +
                " \"ROUTE\": \"THE STREET 12\",\n";
        
        // 第一步:用目标键(兼容键与冒号、冒号与值之间的任意空格)分割字符串
        String[] afterKey = myString.split("\"ROUTE_UNIQUE_ID_REFERENCE\"\\s*:\\s*\"");
        if (afterKey.length >= 2) {
            // 第二步:对分割后的第二部分用双引号拆分,第一个元素就是目标值
            String[] valueParts = afterKey[1].split("\"");
            if (valueParts.length > 0) {
                System.out.println("提取到的值:" + valueParts[0]);
            } else {
                System.out.println("未找到对应值!");
            }
        } else {
            System.out.println("未找到ROUTE_UNIQUE_ID_REFERENCE键!");
        }
    }
}

方案细节说明

  1. 第一次split的正则"ROUTE_UNIQUE_ID_REFERENCE"\\s*:\\s*\":
    • 精准匹配目标键的完整字符串,\\s*用来兼容键和冒号、冒号和值之间的任意空白字符(包括换行、空格、制表符)
    • 分割后数组的第二个元素,就是从目标值的第一个字符开始到后续的内容
  2. 第二次split用"拆分:
    • 此时拆分出的第一个元素就是被双引号包裹的目标值,直接取出即可

这个方案不需要匹配整个键值对,只针对目标键做定位,避免了匹配无关内容的风险,而且逻辑简单易懂,完全满足你只能使用split的要求。

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:16