2012-05-07 19 views
12

Mam zachowany jeden plik tekstowy w folderze res/raw w czasie zaćmienia. Pokazuję tutaj zawartość tego pliku:Parsowanie JSON w Androidzie - z folderu zasobów

{ 
    "Categories": { 
     "Category": [ 
      { 
       "cat_id": "3", 
       "cat_name": "test" 
      }, 
      { 
       "cat_id": "4", 
       "cat_name": "test1" 
      }, 
      { 
       "cat_id": "5", 
       "cat_name": "test2" 
      }, 
      { 
       "cat_id": "6", 
       "cat_name": "test3" 
      } 
     ] 
    } 
} 

Chcę przetworzyć tę tablicę JSON. Jak mogę to zrobić?

Czy ktokolwiek może mi pomóc?

Z góry dziękuję.

+1

Wow 9K, good going @Waqas – Lucifer

+0

możliwy duplikat [Jak analizować ciąg jsonów w systemie Android?] (Http://stackoverflow.com/questions/8091051/how-to-parse-json-string-in-android) –

+0

Proszę mi powiedzieć. jak mogę zapisać te dane w łańcuchu? Pomóż mi –

Odpowiedz

34
//Get Data From Text Resource File Contains Json Data.  
InputStream inputStream = getResources().openRawResource(R.raw.json); 
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

int ctr; 
try { 
    ctr = inputStream.read(); 
    while (ctr != -1) { 
     byteArrayOutputStream.write(ctr); 
     ctr = inputStream.read(); 
    } 
    inputStream.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
Log.v("Text Data", byteArrayOutputStream.toString()); 
try { 
    // Parse the data into jsonobject to get original data in form of json. 
    JSONObject jObject = new JSONObject(
      byteArrayOutputStream.toString()); 
    JSONObject jObjectResult = jObject.getJSONObject("Categories"); 
    JSONArray jArray = jObjectResult.getJSONArray("Category"); 
    String cat_Id = ""; 
    String cat_name = ""; 
    ArrayList<String[]> data = new ArrayList<String[]>(); 
    for (int i = 0; i < jArray.length(); i++) { 
     cat_Id = jArray.getJSONObject(i).getString("cat_id"); 
     cat_name = jArray.getJSONObject(i).getString("cat_name"); 
     Log.v("Cat ID", cat_Id); 
     Log.v("Cat Name", cat_name); 
     data.add(new String[] { cat_Id, cat_name }); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

"Kategorie" to obiekt Json, a "Kategoria" to Json Array zawierający wszystkie rekordy. –

+1

Dziękuję bardzo za Deval. Działa to dobrze ...... :-) ciesz się –

0
  1. Przeczytaj go do String
  2. Tworzenie JSONArray z pobranym String
  3. użytkowania get() metod, aby odzyskać swoje dane
2

To jest Twój kod:

String fileContent; 
      JSONObject jobj = new JSONObject(fileContent); 
      JSONObject categories = jobj.getJSONObject("Categories"); 
      JSONArray listCategory = categories.getJSONArray("Category"); 
      for(int i = 0; i < listCategory.length(); i++) { 
       JSONObject entry = listCategory.getJSONObject(i); 
       //DO STUFF 
      } 
+0

Co powinienem przekazać w fileContent? Tak, wiem, że to ciąg. Ale jak przekazać ten ciąg w moim przypadku? Proszę podać swój format –

+0

fileContent jest zawartością twojego pliku w res/raw. Czy potrzebujesz również kodu, aby to załadować? – StErMi

+0

Hej, dziękuję bardzo. Próbowałem tego. Działa dobrze :) –

0

A ndroid framework ma pomocnika JsonReader in android.util package

Działa jak urok, jest świetnym przykładem. W pierwszym bloku małego błędu z nieobecnym nawiasach kwadratowych „}”:

public List readJsonStream(InputStream in) throws IOException { 
    JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8")); 
    try { 
     return readMessagesArray(reader); 
    } finally { 
     reader.close(); 
    } 
} 

Występuje też wielką bibliotekę z Google deweloperów GSON, co daje możliwość map json strukturę prosto do modelu Java: spójrz here