我有一个Java应用程序正在点击返回以下JSON的第三方RESTful Web服务:
{"fizz":
{"widgets":
[
{
"widget_id":"295874"
},
{
"widget_id":"295873"
},
{
"widget_id":"295872"
}
],
"otime":1361993756
},
"resp":"ok"
}
通常情况下,我会使用GSON或Genson将其映射回Java POJO,但这是我必须执行此操作的唯一代码区域,我想在这里保持懒惰; - )。
我正在努力想出一个提取3个widget_id
值(,
和`) and returns them as a
列表'的漂亮方法:
public List<Long> extractIdsFromJson(String json) {
// Can I solve this with a regex perhaps?
}
不确定正确的方法是什么 - 正则表达式,替换所有,还有其他什么?提前谢谢。
答案 0 :(得分:7)
从长远来看,在这里懒惰只会咬你。解析JSON并以这种方式提取值;涉及的“努力”将更少,代码将更容易理解,未来的代码维护者不会诅咒你的名字。
答案 1 :(得分:4)
// untested
public List<Long> extractIdsFromJson(String json) {
List<Long> list = new ArrayList<Long>();
Matcher matcher = Pattern.compile("\"widget_id\":\"?(\\d+)\"?").matcher(json);
while (matcher.find())
list.add(Long.valueOf(matcher.group(1)));
return list;
}
答案 2 :(得分:3)
如果你喜欢懒惰。这是解决方案。我希望你知道如何用正则表达式解决问题:
Object
或Array
。RAW正则表达式:
"widget_id"\s*:\s*"(\d+)"
在文字字符串中:
"\"widget_id\"\\s*:\\s*\"(\\d+)\""
使用上面的正则表达式Matcher
循环:
Pattern p = Pattern.compile("\"widget_id\"\\s*:\\s*\"(\\d+)\"");
Matcher m = p.matcher(inputString);
while (m.find()) {
System.out.println(m.group(1));
}