[英]Regex to extract value from a simple JSON Object
我正在尋找基於此鍵的JSON值,而無需任何JSON庫。 我認為可以在正則表達式中完成,只是不知道如何做。 所有值都是整數。
{"key1":11,"key2":2877,"key3":666,"key4":2906}
例如,如果我將key1作為方法的輸入,我想返回整數11。
public String valueFromKey(String key, String json) {
String result = null;
String patternStr= "Some regex with " + key;
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(json);
while (matcher.find())
result = matcher.group(1);
}
return result;
}
// elsewhere..
String numStr = valueFromKey("key1", "{\"key1\":11,\"key2\":2877,\"key3\":666,\"key4\":2906}");
if (numStr != null)
int val = Integer.parseInt(numStr);
我只會使用JSON解析器。
話雖如此,您已經說過:
如果再加上另一個主要假設:
:
周圍沒有空格) 然后是的,可以使用一個非常簡單的正則表達式:
"key1":(\d+)
由於Java沒有正則表達式的文字,對於字符串中有,因為我們需要使用在字符串字面特殊字符一些反斜杠(具體地講, "
和\\
):
Pattern p = Pattern.compile("\"key1\":(\\d+)");
這定義了與文字字符串"key1":
的匹配"key1":
后跟一個或多個數字,並將這些數字定義為捕獲組。 這是JavaScript中的示例:
var json = '{"key1":11,"key2":2877,"key3":666,"key4":2906}'; var match = /"key1":(\\d+)/.exec(json); console.log(match ? "Got " + match[1] : "No match");
我不建議這樣做 ,但是基於這些假設,這是可能的。
最好使用Json Parser,但如果您堅持:
Pattern pattern = Pattern.compile(
String.format("\"%s\":\s([0-9]+)", key)
);
在這里,我假設值只是數字,並且鍵和值之間可以有空格。
另一種選擇是使用split
和Map
:
Map<String, Integer> map = new HashMap<>();
for (String keyValue: json.split(",")) {
String[] data = keyValue.split(":");
map.put(
data[0].replace("\"", """),
Integer.valueOf(data[1].trim());
);
}
之后,您只需執行map.get(key)
。
當您可以使用解析器解析JSON時,我根本不知道為什么要這么做。
String patternStr= key + "\":(\\d+)";
根據您顯示給我們的輸入字符串,正則表達式將為key
+ \\":(\\d+)"
。
不過,請使用JSON PARSER 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.