我希望在没有任何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);
答案 0 :(得分:3)
我只想使用JSON解析器。
话虽如此,你说过:
如果我们添加另一个主要假设:
:
周围没有空格)然后是的,这是可能的,有一个相当简单的正则表达式:
"key1":(\d+)
由于Java没有正则表达式文字,因此字符串中包含一些反斜杠,用于我们需要使用的字符串文字特有的字符(特别是"
和\
): / p>
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");
我不推荐,但有了这些假设,就有可能。
答案 1 :(得分:1)
最好使用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)
。
答案 2 :(得分:1)
当你可以使用解析器解析JSON时,我根本不知道你为什么要这样做,但就在这里。
String patternStr= key + "\":(\\d+)";
根据您向我们展示的输入字符串,正则表达式将为key
+ \":(\d+)"
。
使用JSON PARSER 。