java - 正则表达式从简单的 JSON 对象中提取值

标签 java json regex

我希望在没有任何 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/

相关文章:

java - 双重检查锁定是否仅在惰性初始化场景中被破坏?

java - 使用 Jackson 流式传输内部 JSONArray 记录,避免内存收集

javascript - 如何在我的网页上以漂亮的格式显示 JSON 对象?

java - 显示不匹配的字符串,正则表达式否定

java - 在黑莓模拟器上运行网络服务时出错

java - 将数组从一个类调用到另一个类

java - Java/MySQL 中的 if/else 语句

java - 使用 Gson 反序列化复杂的 JSON

javascript - JS 正则表达式格式和列表验证

ruby - 什么是 Ruby 正则表达式来匹配至少有一个句点且没有空格的字符串?