2011-05-19 50 views
-1

道歉,如果主題標題不準確,我真的不知道如何表達它(沒有雙關語意圖)。 我必須用類似於下面的結構來解析JSON。在這個文件中有幾個Date數組:每個數組都以yyyy-MM-dd的形式命名,但是我不知道文件中的具體日期(所以我不能提取數組其名稱)。我還能怎樣得到它? 我正在使用json.simple for Java解析文件。我不指望一個答案,告訴我如何使用該庫專門做它,但如果有人知道,這將是一個獎金:)JSON解析時名稱是正則表達式(日期)

"2011-05-15":[ 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"AnahiHappyBDay", 
     "name":"AnahiHappyBDay" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Puerto Ricans", 
     "name":"Puerto Ricans" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Epic Movie", 
     "name":"Epic Movie" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Lee Soonkyu", 
     "name":"Lee Soonkyu" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"MC1123", 
     "name":"MC1123" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Dominique Strauss-Kahn", 
     "name":"Dominique Strauss-Kahn" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"WeLoveNickJonas", 
     "name":"WeLoveNickJonas" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Ripper Stefan", 
     "name":"Ripper Stefan" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Luc\u00eda P\u00e9rez", 
     "name":"Luc\u00eda P\u00e9rez" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"DB5K", 
     "name":"DB5K" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"WeSupportYouGomez", 
     "name":"WeSupportYouGomez" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"LSnoAltasHoras", 
     "name":"LSnoAltasHoras" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Azerbaijan", 
     "name":"Azerbaijan" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Eurovision", 
     "name":"Eurovision" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Derek Boogaard", 
     "name":"Derek Boogaard" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Terry Wogan", 
     "name":"Terry Wogan" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"FMI", 
     "name":"FMI" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"WorldLovesSwift", 
     "name":"WorldLovesSwift" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"WorldWarIV", 
     "name":"WorldWarIV" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Jedward", 
     "name":"Jedward" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"GAGA10MILLION", 
     "name":"GAGA10MILLION" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Stefan Raab", 
     "name":"Stefan Raab" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Manchester United Campe\u00f3n", 
     "name":"Manchester United Campe\u00f3n" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Derek Mooney", 
     "name":"Derek Mooney" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Chord Overstreet", 
     "name":"Chord Overstreet" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"IMF", 
     "name":"IMF" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Joe Buck", 
     "name":"Joe Buck" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d", 
     "name":"\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"Wango Tango", 
     "name":"Wango Tango" 
    }, 
    { 
     "promoted_content":null, 
     "events":null, 
     "query":"AlwaysRihannaNavy", 
     "name":"AlwaysRihannaNavy" 
    } 
    ], 
+0

>我還能怎麼得到它?我不明白。你是說你在一個文件中有多個json,你想要處理每個? – 2011-05-19 14:05:55

回答

1

我不太清楚,如果我明白你的問題,但我假設你想要一個日期鍵列表。

Parsering這與json.simple應導致一個JSONObject這是一個地圖,所以它的keySet()方法會給你你需要的東西:

JSONObject<String, Object> obj = (JSONObject<String, Object>)JSONValue.parse(s); 
for (String key in obj.keySet()) { 
    // do something with key 
} 
+0

謝謝,RoToRa。起初,我得到了一個參考,說JSONObject不帶參數,所以我只是刪除了這樣的參數: JSONObject obj =(JSONObject)JSONValue.parse(s); for(String key in obj.keySet()){ //用鍵做點什麼 } 它的功能非常完美。再次感謝 – Benji 2011-05-19 23:36:41

0

其實我不是很明白你的意思...... 然而,我想我有一個解決方案[使用GSON(谷歌圖書館)] 看完你的數據後,我認爲我們可以創建一個類。像這樣

public class Foo{ 
    private Date date/* or ID ?*/; 
    private List<Content> contents; //a class defined blow 
    /* constructors and methods */ 
} 

public class Content{ 
    private String promoted_content;// Or a class? I'm not sure, because I found all of them is null 
    private String events;// same as promoted_content 
    private String query; 
    private String name;  
    /* constructors and methods */ 
} 

現在,用gson解析你的數據。像這樣

Gson gson = new Gson();//maybe you wanna read docs of gson for more detail 
Foo foo = gson.fromjson(/*your data*/, Foo.class); 

在這裏你知道你有一個名爲Foo的對象,你可以得到它的值。我注意到,你說也許有不止一個「日期」,所以我們可以創建一個包含List的新類。

+0

嗨Pikaurd 最初我使用GSon,但我解析的數據有很多不必要的元素和屬性。我不想創建大型的無用元素類,只能讓Gson從數據中創建這個類的對象。我寧願手動解析它,即使它最終意味着更多的工作。儘管如此,我確實喜歡Gson的想法。它可以做「手動」解析以及編組/解組嗎? (也就是說,我可以告訴它用鍵「xyz」提取對象嗎?) – Benji 2011-05-19 23:41:09

+0

嗨Benji.You是正確的。如果您的工作是提取指定數據,則不需要GSON。你說「我解析有很多不必要的元素和屬性。」對於這個我的解決方案是創建一個對象不包含不必要的元素和屬性。例如你有一個數據['日期':[{a:1,b:2,c:#}]],只需要'a'。創建一個類只有一個屬性a,GSON會忽略未在您的類中聲明的數據。無論如何,json.simple比GSON更有效率,以上是我的看法。 – Pikaurd 2011-05-20 01:41:15