2014-12-31 74 views
2

我不得不JSON字符串轉換這樣JSON來HashMap中<日期,整數>

{"Tue Jan 13 00:00:00 MEZ 2015":2131165194,"Mon Jan 12 00:00:00 MEZ 2015":2131165194, 
"Thu Dec 11 00:00:00 MEZ 2014":2131165194,"Fri Dec 12 00:00:00 MEZ 2014":2131165194, 
"Mon Jan 19 00:00:00 MEZ 2015":2131165194,"Wed Dec 10 00:00:00 MEZ 2014":2131165194, 
"Mon Jan 05 00:00:00 MEZ 2015":2131165194} 

成HashMap中。

真的有必要編寫一個解析器嗎?

我儘量避免這種情況,因爲我從來沒有做過這種滋味,而且看起來相當困難。我會很樂意提前提供任何幫助和感謝!

+0

你能解釋一下你的意思我用從來沒有這個bevor?什麼是愛好?你的問題是基於我的猜測? –

+0

我從來沒有寫過一個解析器(對不起,我的英語技能不是最好的^^) –

+0

首先不要抱歉因爲你沒有說任何不好的東西。你在這裏提高你的編程技能。只要相信我,如果你得到了投票,不要把它當作個人。只要看看它如何讓自己變得更好,那麼試着看看如何改進你的答案,因爲你的近距離投票是因爲你的問題似乎對一個人來說太過於國外 –

回答

3

如果你的鑰匙都是獨一無二的 - 你可以因爲你提到GSON使用下面的代碼

String s = "{\"Tue Jan 13 00:00:00 MEZ 2015\":2131165194,\"Mon Jan 12 00:00:00 MEZ 2015\":2131165194,\n" + 
      "\"Thu Dec 11 00:00:00 MEZ 2014\":2131165194,\"Fri Dec 12 00:00:00 MEZ 2014\":2131165194,\n" + 
      "\"Mon Jan 19 00:00:00 MEZ 2015\":2131165194,\"Wed Dec 10 00:00:00 MEZ 2014\":2131165194,\n" + 
      "\"Mon Jan 05 00:00:00 MEZ 2015\":2131165194}"; 
    Map<Date, Long> map = new GsonBuilder().setDateFormat("E MMM dd HH:mm:ss 'MEZ' yyyy").create().fromJson(s, new TypeToken<HashMap<Date, Long>>() { 
    }.getType()); 
2

,你需要設置date format爲GSON對象(您可以通過GsonBuilder建立它),然後聲明TypeToken<Map<Date, Integer>>之後,只需調用fromJson例如

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import com.google.gson.reflect.TypeToken; 

import java.lang.reflect.Type; 
import java.util.Date; 
import java.util.Map; 

public class Test { 
    public static void main(String[] args) { 

     String json = "{\"Tue Jan 13 00:00:00 MEZ 2015\":2131165194,\"Mon Jan 12 00:00:00 MEZ 2015\":2131165194,\n" + 
       "\"Thu Dec 11 00:00:00 MEZ 2014\":2131165194,\"Fri Dec 12 00:00:00 MEZ 2014\":2131165194,\n" + 
       "\"Mon Jan 19 00:00:00 MEZ 2015\":2131165194,\"Wed Dec 10 00:00:00 MEZ 2014\":2131165194,\n" + 
       "\"Mon Jan 05 00:00:00 MEZ 2015\":2131165194}"; 

     Type type = new TypeToken<Map<Date, Integer>>() { 
     }.getType(); 
     Gson gson = new GsonBuilder().setDateFormat("EEE MMM dd HH:mm:ss 'MEZ' yyyy").create(); 

     Map<String, String> myMap = gson.fromJson(json, type); 

     System.out.println(myMap); 
    } 
} 

輸出

{Tue Jan 13 00:00:00 CET 2015=2131165194, Mon Jan 12 00:00:00 CET 2015=2131165194, Thu Dec 11 00:00:00 CET 2014=2131165194, Fri Dec 12 00:00:00 CET 2014=2131165194, Mon Jan 19 00:00:00 CET 2015=2131165194, Wed Dec 10 00:00:00 CET 2014=2131165194, Mon Jan 05 00:00:00 CET 2015=2131165194} 
+0

將字符串更改爲:String json =「{\」Tue Jan 13 00:00:00 MEZ 2015 \「:2131165194,\」1月13日星期二00:00:00 MEZ 2015 \「:2131165194,\ 1月13日星期二00:00:00 MEZ 2015 \「:2131165194}」; 你知道嗎,如何防止重複鍵異常? – VKDev

+0

@ user1050819 JSON對象具有兩個具有相同名稱的屬性是非法的。如果你真的想要它,那麼使用'gson 1.6' – sol4me

相關問題