2012-06-06 19 views
1

我需要您的幫助以解決以下問題。我想讀取JSON文件的父標籤。以下是我的JSON文件內容;如何閱讀Android中的JSON父標記

{ 
    "ebook": 
     [ 
      {"id":"1","name":"book1"}, 
      {"id":"2","name":"book2"} 
     ], 
    "ebrochure": 
     [ 
      {"id":"1","name":"brochure1"}, 
      {"id":"2","name":"brochure2"}  
     ], 
    "emenu": 
     [ 
      {"id":"1","name":"menu1"}, 
      {"id":"2","name":"menu2"}   
     ] 
} 

我只需要找出父母多少標籤在JSON和它們是什麼。據我給JSON文件的答案應該是(有3個父JSON變量)和 「電子書電子手冊emenu」(父標籤的名稱)。其他任何JAVA課程我都可以完成我的工作嗎?

我知道如何閱讀完整的JSON文件。首先,我們將JSON傳遞給JSONObject,然後使用getJSONArray()方法將孩子傳遞給JSONArray

但是getJSONArray()方法需要父標籤的名稱。根據我的示例,它可以是電子書,電子手冊emenu。假設有一種情況,我們無法看到JSON的內容僅訪問該URL。在這種情況下,我需要找出有多少家長標籤,以及他們的名字。

這是我的問題。在此先感謝我的幫助:-)

+1

那麼,什麼方法都可以在一個JSONObject,可能是有用的? (頂層JSONObject有** 3 **鍵/值對,這怎麼可以通過編程方式找到?) – 2012-06-06 05:10:25

+1

這沒有意義:_there有一種情況,我們無法看到JSON的內容只訪問URL_如果您可以訪問URL,則可以獲取內容。當你得到內容時,'JSONObject(URLText).length()'會告訴你「父」標籤的數量:實際上,它們是匿名父代的子標籤。 'JSONObject.names()'和'JSONObject.optJSONArray()'也可以幫助你。 –

+0

@ KenY-N是的,如果我沒有提到**在我的問題中假設**這個詞是沒有意義的。 :-)因爲背後有一個巨大的故事*假設*單詞。如果我告訴總結;在實現Android應用程序之後,可以通過添加新的父標籤來更改JSON。根據父標籤,我正在顯示一些UI元素。所以我不想在每次使用新的父標籤編輯JSON時更改我的代碼。如果我可以通過程序識別多少個父標籤和那裏的名字,那麼我可以根據這個加載UI。我想現在你有一個想法,爲什麼我寫了這樣的問題。 :-) – AnujAroshA

回答

1
JSONObject jobj = new JSONObject(Your Json String); 
JSONArray jarray=jobj.names(); 

    for(int i=0;i<jarray.length();i++){ 

     Log.e("parenttag",jarray.getString(i)); 

    } 

U將得到所有的父標籤u有在你jsonString

+0

我不知道爲什麼有人點擊「無用」標籤在這裏。但這對我很有用。 – AnujAroshA

+0

非常不幸的是,API的設計原因是......但是對於一個小型工作示例而言,它是+1。 – 2012-06-06 18:30:22

5

你應該閱讀JSONObject.names

基本上,names()(Android中)可以用來獲得字段名數組的文檔,然後使用這些作爲你的鑰匙。我不會在這裏做一個完整的例子,因爲如果你自己嘗試,你會更好地學習。

+0

'getNames(JSONObject jo)'但上面的字符串中的「JSONObject」在哪裏? –

+0

@TusharDhoot Android似乎沒有包含[getNames()](http://developer.android.com/reference/org/json/JSONObject.html) –

+0

@pst在Lalit Poptani的鏈接之後,你會怎麼說? –

2
public static String Fechingdata(String response){ 
     Id1.clear(); 
     Id2.clear(); 
     Id3.clear(); 
     name1.clear(); 
     try{ 
      JSONArray jsonarray = new JSONArray("["+response+"]"); 
      JSONObject jsonobject = jsonarray.getJSONObject(0); 
      parseForResponse1(jsonobject.getString("ebook"),1); 
      parseForResponse2(jsonobject.getString("ebrochure"),2); 
      parseForResponse3(jsonobject.getString("emenu"),3); 
      return response; 

     }catch (Exception e) { 
      return "\"" + "Access Denied" + "\""; 
     } 
    } 

    private static void parseForResponse1(String res,int i) { 
     try{ 

      JSONArray jsonarray1 = new JSONArray(res); 
      Log.d("jsarry1",""+jsonarray1.length()); 
      for(int i=0;i<jsonarray1.length();i++){ 
       JSONObject jsonobject = jsonarray1.getJSONObject(i); 
       if(i ==1){ 
        Id1.add(jsonobject.getString("id")); 
        name1.add(jsonobject.getString("id")); 
       } 
       if(i ==2){ 
        Id2.add(jsonobject.getString("id")); 
        name2.add(jsonobject.getString("id")); 
       } 
       if(i ==2){ 
        Id3.add(jsonobject.getString("id")); 
        name3.add(jsonobject.getString("id")); 
       }  
      } 

     } 
     catch (Exception e) { 
      System.out.println(e.toString()); 
     } 

    } 

該試試這個JSON這個parsging

+0

他不知道他的鑰匙會是什麼......這就是問題所在。 – Tushar

+0

很好的例子,如果我們知道鑰匙 – Kutbi