2013-05-14 164 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