我试图仅使用“ 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?
答案 0 :(得分:0)
您的正则表达式没有达到您的期望。它不匹配"ROUTE_UNIQUE_ID_REFERENCE":"...",
,但匹配任何以ROUTE_UNIQUE_ID_REFERENCE中的任何字母开头的键。您可以用\"ROUTE_UNIQUE_ID_REFERENCE[\"\\s:]+([^\",]+)
之类的东西替换它,以匹配匹配器组1中的内容。
拆分功能无法按预期工作。在拆分中使用的正则表达式被视为定界符。因此,它将删除您希望提取的数据。
假设您要获取ROUTE_UNIQUE_ID_REFERENCE的所有值,那么在实际数据中有多个ROUTE_UNIQUE_ID_REFERENCE
的情况下,您的第一个示例将更接近之后的示例。
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));
}