2014-09-13 3 views
0

Я использую этот метод для разбора строки JSON, но он слишком медленный ... есть ли лучший способ сделать это? ThanksУскоренный способ разбора строки JSON в android

synchronized private void parseCategories(String response){ 

    try{ 
     JSONArray categoriesJSONArray = new JSONArray (response); 


     // looping through All Contacts 
     for(int i = 0; i < categoriesJSONArray.length(); i++){ 
      JSONObject currentCategory = categoriesJSONArray.getJSONObject(i); 

      String label=""; 
      String categoryId=""; 


      // Storing each json item in variable 
      if(currentCategory.has("label")) 
       label = currentCategory.getString("label"); 


      if(currentCategory.has("id")) 
       categoryId = currentCategory.getString("id"); 

      if(
       label!=null && 
       categoryId!=null 
      ) 
      { 
       Category toAdd = new Category(categoryId, label); 
       categories.add(toAdd); 
      } 

     } 

     //Alphabetic order 
     Collections.sort(
       categories, 
       new Comparator<Feed>() { 
        public int compare(Feed lhs, Feed rhs) { 
         return lhs.getTitle().compareTo(rhs.getTitle()); 
        } 
       } 
     ); 

     Intent intent = new Intent("CategoriesLoaded"); 
     LocalBroadcastManager.getInstance(mAppContext).sendBroadcast(intent); 


    }catch (JSONException e) { 
     e.printStackTrace(); 
    } 

} 
+0

Вы пробовали использовать GSON? Я не уверен, что это быстрее, но это гораздо удобнее. – hoomi

+0

Вы устанавливаете label = "" и categoryId = "", так что они не могут быть пустыми. Значит, вы не добавляете много категорий с "" как меткой и идентификатором? – MTilsted

+0

Ни один ответ не самый быстрый. – mmlooloo

ответ

1

Для этого попробуйте использовать следующий код. Для этого вам понадобится библиотека Gson.

Gson gson=new Gson(); 
MyBean myBean=gson.fromJson(response); 

Note: Здесь MyBean класс содержит поля, присутствующие в вас JSon строка для например id, вместе с геттером и сеттерами. Остальная часть обрабатывается Gson.

Настоящая бесплатная демо-версия.

import com.google.gson.annotations.SerializedName; 

public class Box { 

    @SerializedName("id") 
    private String categoryId; 

    // getter and setter 
} 

Допустим, вы JSON выглядит следующим образом:

{"id":"A12"} 

Вы можете разобрать его следующим образом:

class Parse{ 
public void parseJson(String response){ 
    Gson gson=new Gson(); 
    Box box=gson.fromJson(response,Box.class); 
    System.out.println(box.getCategoryId()); 
} 
} 

Выход:

A12 

Для получения дополнительной информации о Gson посетите here

+0

Спасибо, но как я могу это сделать, если параметр «id» в строке json должен быть вставлен в строку «id_cat» класса ... есть ли способ сделать это? –

+0

Используйте аннотации для них. Вы можете указать json key в аннотации поля класса. –

+0

Можете ли вы отправить пример, пожалуйста? спасибо –

1

Использование библиотеки GSON. Вы можете преобразовать свой объект в строку json, как показано в следующем примере:

MyClass MyObject; 
Gson gson = new Gson(); 
String strJson = gson.toJson(MyObject); 
Смежные вопросы