使用Regex拆分JSON Payload以获取价值

时间:2019-06-19 12:30:17

标签: java regex split

我试图仅使用“ split”方法从部分JSON有效负载中获取值。由于此API的功能非常有限,因此我只能使用此方法。我可以使用Pattern和Match API来获得价值。

Dim qdf As DAO.QueryDef
With CurrentDb
    With .OpenRecordset("SELECT ext_BEL_PLZ.NR, ext_BEL_PLZ.BEZ " & _
                        "FROM ext_BEL_PLZ INNER JOIN BEL_PLZ ON BEL_PLZ.NR = ext_BEL_PLZ.NR", dbOpenSnapshot)
        Set qdf = .Parent.CreateQueryDef(vbNullString)
        qdf.SQL = "PARAMETERS paraBEZ Text ( 255 ), paraNr Long;" & _
                       "Update BEL_PLZ Set BEL_PLZ.BEZ = [paraBEZ] " & _
                       "Where BEL_PLZ.NR = [paraNr]"
        Do Until .EOF
             qdf.Parameters("paraBez") = .Fields("BEZ").Value
             qdf.Parameters("paraNr") = .Fields("NR").Value
             qdf.Execute dbFailOnError
             .MoveNext
        Loop
    End With
End With

但是;当我尝试使用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*\"([^\"]+)\",?";

        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!");
        }
    }
}

什么是最好的方法?是否有更好的方法,仅使用split即可获得ROUTE_UNIQUE_ID_REFERENCE?

1 个答案:

答案 0 :(得分:0)

  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));
    }