【发布时间】:2017-11-27 06:36:41
【问题描述】:
我的字符串输入类似于:
{"key1":"value1","key2":"{\"key2_1\":\"123\",\"key2_2\":\"456\",\"key2_3\":\"33333\"}"}
上述JSON中的值字段可以包含"、\等字符。为了您的方便,这里是格式化的版本:
{
"key1": "value1",
"key2": "{\"key2_1\":\"123\",\"key2_2\":\"456\",\"key2_3\":\"33333\"}"
}
我想使用 Gson 将 String 转换为 Foo 对象:
class Foo {
private String key1;
private Bar key2;
...
}
class Bar {
private String key2_1;
private String key2_2;
private String key2_3;
...
}
这是我的正则表达式:
String regexp = "\\{[\"a-zA-Z-0-9:,\\\\]*\"key2\":\"\\{\\\\\"key2_1\\\\\":\\\\\"[a-zA-Z0-9]*\\\\\",\\\\\"key2_2\\\\\":\\\\\"[a-zA-Z0-9]*\\\\\",\\\\\"key2_3\\\\\":\\\\\"[a-zA-Z0-9]*\\\\\"\\}\"\\}[\"a-zA-Z-0-9:,\\\\]*";
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(text);
if(matcher.matches()) {
... // TODO: Replace all "{, \" and }" but How???
}
如何使用这个正则表达式将所有"{、\".和"}替换为{、"、}而不更改JSON中的键和值?
找到子字符串并使用String的替换方法将是我的备用解决方案。
同样,我的最终目标是将输入字符串解析为我的 Foo 对象。有没有比使用正则表达式更好的方法?
谢谢!
【问题讨论】:
-
不应该像这样正常工作吗?
-
@Shark Matcher 只返回一个布尔值。我无法通过“就像这样”将字符串转换为对象。请注意 key2 的输入值是一个字符串,而 Foo 对象中对应的字段是 Bar 对象。
-
我的意思是,JSON 已经包含一个
Bar对象;它不应该解析成Foo实例吗? -
@Shark JSON 包含一个用于 Bar 对象的字符串,而不是普通的 JSON 对象。将 String 直接解析为 Foo 对象会引发错误。