[英]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.