【发布时间】:2020-07-12 22:00:53
【问题描述】:
我正在尝试编写代码以按照某种模式从字符串中提取一些值。基本上是来自 json 的键和值,其中值包含在 {{value}}
中在下面的代码中:
String jsonString = "{\"title\":\"{{string_64|dsm_title}}\",\"code\":\"{{string_16|dsm_code}}\",\"enabled\":true,\"enableAdvanceFilter\":false,\"deleteAfterScheduledTime\":false,\"enableDataStoreLog\":false}";
String patternString = "[\"](?<key>.*)[\"][:][? ]?.*[{][{](?<value>.*)[}][}]";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(jsonString);
HashMap<String, Object> allMatches = new HashMap<>();
while (matcher.find()) {
allMatches.put(matcher.group("value"), matcher.group("key"));
}
System.out.println(allMatches);
我期望输出为:
string_64|dsm_title -> title
string_16|dsm_code -> code
但它给我的输出是:
string_16|dsm_code -> title":"{{string_64|dsm_title}}","code
请帮助我纠正正则表达式。 请不要提供有关将其解析为 json 和所有内容的解决方案。这不是我需要的解决方案。
【问题讨论】:
-
不要使用正则表达式解析 JSON。使用 JSON 解析器。
-
我没有解析 json。我正在尝试按照某种模式提取一些字符串。不要将其视为 json。将其视为一个简单的字符串。
-
从值映射到键是一个非常奇怪的想法。这意味着如果两个键具有相同的值,则结果映射中只有一个。