簡體   English   中英

Java - 使用多正則表達式從字符串中提取 JSON 值

[英]Java - extract JSON values from string using multi regex

我正在嘗試使用這個多正則表達式 java 庫從字符串中提取 JSON 字段值。

我的 JSON 看起來像這樣:

{
  "field1": "something",
  "field2": 13
  "field3": "some"
}

我創建了一個正則表達式模式來適應每個領域,它通過簡單地為每個模式做這樣的事情來使用 Java 正則表達式模式:

Matcher matcher = patternToSearch.matcher(receiveData);
        if (matcher.find()) {
            return matcher.group(1);
        }

我決定嘗試改進代碼並使用多正則表達式,而不是掃描字符串 3 次,它只會掃描一次並提取所有需要的值。

所以我想出了這樣的事情:

String[] patterns = new String[]{
                    "\"field1\":\\s*\"(.*?)\"",
                    "\"field2\":\\s*(\\d+)(\\.\\d)?",
                    "\"field3\":\\s*\"(.*?)\"",
            };
            this.matcher = MultiPattern.of(patterns).matcher();

matcher只有一種方法 - match - 像這樣使用:

int[] match = this.matcher.match(jsonStringToScan);

所以我最終得到了一個整數列表,但我不知道如何從這些字符串中獲取 json 值以及這些整數如何幫助我。 多正則表達式matcher不支持我之前使用的group方法來獲取值。

知道如何使用多正則表達式從字符串中提取多個 json 值嗎? (只掃描一次字符串)

正如在您的鏈接match github 頁面上提到的,返回match模式的索引。 此頁面的另一點:

圖書館不處理組。

也考慮將匹配鍵作為組。 看這個簡單的例子:

    final Pattern p = Pattern.compile("\"(field.)\":((?:\".*?\")|(?:\\d+(?:\\.\\d+)?))");
    final Matcher m = p.matcher("{\"field3\":\"hi\",\"field2\":100.0,\"field1\":\"hi\"}");
    while (m.find()) {
        for (int i = 1; i <= m.groupCount(); i++) {
            System.out.print(m.group(i) + " ");
        }
        System.out.println();
    }

它打印:

field3 "hi" 
field2 100.0 
field1 "hi" 

如果要避免值組中的引號,則需要更復雜的邏輯。 我停在:

        final Pattern p = Pattern.compile("\"(field.)\":(?:(?:\"(.*?(?=\"))\")|(\\d+(?:\\.\\d+)?))");

導致

field3 hi null 
field2 null 100.0 
field1 hi null 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM