我希望在没有任何 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 解析器。
话虽如此,您也说过:
- 你不想
- 所有值均为整数
如果我们添加另一个主要假设:
- JSON 将采用最小形式,未格式化(属性名称和值之间的
:
周围没有空格)
那么是的,这是可能的,使用一个相当简单的正则表达式:
"key1":(\d+)
由于 Java 没有正则表达式文字,因此该字符串中包含一些反斜杠,用于表示我们需要使用的字符串文字中的特殊字符(特别是 "
和 \
):
Pattern p = Pattern.compile("\"key1\":(\\d+)");
它定义了后跟一个或多个数字的文字字符串 "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");
我不建议这样做,但根据这些假设,这是可能的。
关于java - 正则表达式从简单的 JSON 对象中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37828214/