2013-05-14 163 views
1

我是Java新手。请帮帮我。我有一个JSON响应下面的问题:Java - 日期模式匹配

{"GetResult":"{ \"IsDate\": [ {  \"Code\": \"200\" }, {  \"Message\": \"Fetched successfully\" }, {  \"ID\": \"722c8190c\",  \"Name\": \"Recruitment\",  \"Path\": \"URL\",  \"Date\": \"14 May, 2013\" },  ]}"} 

它是一个格式错误的JSON对象。所以,我使用匹配模式来获得NamePathDate并获得NamePath数据如下成功:

Matcher matcherName = Pattern.compile("\\\\\"Name\\\\\":\\s\\\\\"[^,}\\]]+\\\\\"").matcher(Name); 

Matcher matcherPath = Pattern.compile("\\\\\"Path\\\\\":\\s\\\\\"^[^,}\\]]+\\\\\"").matcher(Path); 

所以,从上面的纹路,我能够得到PathName。所以,请帮助如何获得Date。格式为Date is 14 May, 2013。请帮帮我。

+0

大概是与string.replace更好 – Blackbelt 2013-05-14 13:07:51

+0

之前更换我需要得到最新的内容到一个数组。在JSON响应中会有多个日期对象。所以,首先我需要将JSON的所有日期存储到字符串数组中,就像我为Name和Path所做的一样。请帮助我通过'MAtcher'。 – user2381792 2013-05-14 13:11:30

回答

1

匹配器几乎一样的问题:

Matcher matcherDate = Pattern.compile("\\\\\"Date\\\\\":\\s\\\\\"([^\\\\]*)\\\\\"").matcher(brokenJson); 
while (matcherDate.find()) { 
    System.out.println(matcherDate.group(1)); 
} 

然后你就可以使用SimpleDateFormat

更新解析日期。完整的代码从文件中读取brokenJson并解析它:

String brokenJson = Files.toString(new File("1.dat"), Charset.defaultCharset()); 
    Matcher matcherDate = Pattern.compile("\\\\\"Date\\\\\":\\s\\\\\"([^\\\\]*)\\\\\"").matcher(brokenJson); 
    while (matcherDate.find()) { 
     System.out.println(matcherDate.group(1)); 
    } 
+0

这不帮助我。 Iam没有进入While条件。请帮助我, – user2381792 2013-05-14 13:21:55

+0

它适用于我,当我把你的破碎的JSON到一个文件,并从那里读取(以避免在Java中的字符串转义)。看到完整的代码在更新 – hoaz 2013-05-14 13:26:52

+0

谢谢你让我的一天....感谢很多朋友... :) – user2381792 2013-05-14 13:37:11

2

这是有效的json。

入住这里jsonlint

解析像这样

{ 
    "GetResult": "{ \"IsDate\": [ {  \"Code\": \"200\" }, {  \"Message\": \"Fetched successfully\" }, {  \"ID\": \"722c8190c\",  \"Name\": \"Recruitment\",  \"Path\": \"URL\",  \"Date\": \"14 May, 2013\" },  ]}" 
} 

JSONObject parent=new JSONObject(jsonString); 
JSONObject obj=parent.getJSONObject("GetResult"); 
JSONArray array=obj.getJSONArray("IsDate"); 

String jsondatestring=array.getString(2); 
JSONObject datejson=new JSONObject(jsondatestring); 
String date=datejson.getString("Date"); 

如果你想知道如何取消转义这些字符试试这个

使用Commons lang libarray和StringEscapeUtils类。

只需使用

String newString=StringEscapeUtils.unescapeJava(yourString); 
+0

我认为真正的JSON是GetResult属性的值 – hoaz 2013-05-14 13:18:05

+0

@hoaz谢谢,我已编辑答案 – Pragnani 2013-05-14 13:20:34

+1

解析为JSON更好比应用正则表达式,模式匹配 – 2013-05-14 13:32:15