gpt4 book ai didi

java - 使用正则表达式拆分 JSON 有效负载以获取值

转载 作者:行者123 更新时间:2023-12-02 04:14:48 24 4
gpt4 key购买 nike

我正在尝试仅使用“split”方法从部分 JSON 负载中获取值。我只能使用这个方法,因为这个API非常有限。我可以使用 Pattern 和 match API 获取我的值..

package com.company;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {

public static void main(String[] args) {
// write your code here
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 myRegexPattern = "\"([ROUTE_UNIQUE_ID_REFERENCE\"]+)\"\\s*:\\s*\"([^\"]+)\",?";

Pattern pattern = Pattern.compile(myRegexPattern);

Matcher matcher = pattern.matcher(myString);


if (matcher.find())
{
System.out.println(matcher.group(2));
} else {
System.out.println("Didn't work!");
}
}
}

但是;当我尝试使用 String.split 时,它不起作用,并且我的值不在任何数组索引中。

package com.company;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {

public static void main(String[] args) {
// write your code here
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 myRegexPattern = "\"([ROUTE_UNIQUE_ID_REFERENCE\"]+)\"\\s*:\\s*\"([^\"]+)\",?";

String[] newValue = myString.split(myRegexPattern);

for(int i = 0; i < newValue.length; i++) {
if(newValue[i].equals("2172752")) {
System.out.println("IT'S HERE!");
}
}

}
}

最好的方法是什么?有没有更好的方法只使用 split 来获取 ROUTE_UNIQUE_ID_REFERENCE?

最佳答案

  1. 您的正则表达式没有达到您的预期。它不匹配 "ROUTE_UNIQUE_ID_REFERENCE":"...",,但匹配以 ROUTE_UNIQUE_ID_REFERENCE 中的任何字母开头的任何键。您可以将其替换为 \"ROUTE_UNIQUE_ID_REFERENCE[\"\\s:]+([^\",]+) 之类的内容,这将与您在匹配器组 1 中找到的内容相匹配。

  2. 拆分功能无法按您的预期工作。您在分割中使用的正则表达式被视为分隔符。因此,它会删除您希望提取的数据。

假设您希望获取 ROUTE_UNIQUE_ID_REFERENCE 的所有值,在实际数据中存在多个 ROUTE_UNIQUE_ID_REFERENCE 的情况下,您的第一个示例更接近您之后的示例。

  1. 您需要修复正则表达式和匹配组
  2. 使用 while 循环而不是 if 语句来查找所有实例
    String myRegexPattern = "\"ROUTE_UNIQUE_ID_REFERENCE[\"\\s:]+([^\",]+)";
Pattern pattern = Pattern.compile(myRegexPattern);
Matcher matcher = pattern.matcher(myString);

while (matcher.find()) {
System.out.println(matcher.group(1));
}

关于java - 使用正则表达式拆分 JSON 有效负载以获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56667684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com