Данные JSON в приложение для Android - PullRequest
2 голосов
/ 16 мая 2011

Я получил эту часть внутри моего объекта json. Но я не мог получить это как список Java. Это дает ошибку. Поэтому я попытался принять его как строковый массив. Но это было так же, как и раньше. Так что я должен использовать для анализа этих данных, чтобы использовать с моим приложением для Android?

cuisine: {
-cuisine_names: [
"All (36)"
"Malaysian/ Singaporean (1)"
"Asian (1)"
"Australian (2)"
"Chinese (1)"
"European (3)"
"Spanish (1)"
"Greek (2)"
"Steak House (1)"
"Indian (1)"
"International (7)"
"Thai (1)"
"Italian (8)"
"Modern Australian (7)"
]
-price_ranges: [
"Any Price"
"$0-15"
"$15-30"
"$30+"
]
-times: [
"Any Time"
"05:30PM"
"06:00PM"
"06:30PM"
"07:00PM"
"07:30PM"
"08:00PM"
"08:30PM"
"09:00PM"
"09:30PM"
"10:00PM"
"10:30PM"
"11:00PM"
"11:30PM"
]
}

Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 16 мая 2011

Чтобы заполнить список JSONObject, вы должны использовать такую ​​функцию (где NewsBSR - это пользовательский объект с некоторыми базовыми полями):

private ArrayList<NewsBSR> getListObjectsNews(JSONObject objNews)
    {
        ArrayList<NewsBSR> listNews = new ArrayList<NewsBSR>();

        try{
            for (Iterator iterator = objNews.keys(); iterator.hasNext();) 
            {
             String cle = String.valueOf(iterator.next());

             Object objet = objNews.get(String.valueOf(cle));
             Log.v("V", "News: "+cle+ " : "+objet.toString());
             if (cle.equals("results"))
             {
                 JSONArray array = objNews.getJSONArray(cle);
                 for(int i = 0; i < array.length() ; i++)
                 {
                     Object obj = array.get(i);
                     Iterator it = ((JSONObject) obj).keys();
                     NewsBSR news = new NewsBSR();
                     while (it.hasNext())
                     {

                         String k = String.valueOf(it.next());
                         String val = ((JSONObject) obj).getString(k);
                         Log.v("V", "Array content : "+k+ " : "+val);
                         if (k.equals("tt") &&  val.length() > 0)
                         {
                             news.setTitle(val);
                         }
                         if (k.equals("dt") &&  val.length() > 0)
                         {
                            news.setDate(UtilsDate.stringToDate(val));
                         }
                         if (k.equals("num") &&  val.length() > 0)
                         {
                             news.setId(val);
                         }
                     }
                     listNews.add(news);
                 }
             }
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
             Log.v("V", "Error HOME: "+ e.getMessage());
            e.printStackTrace();
        }


        return (listNews);
    }
2 голосов
/ 16 мая 2011

Формат json не должен быть таким.

сначала должен быть корневой объект, окружающий коды, подобные этому.

{ <---this
cuisine: {
-cuisine_names: [
"All (36)"........
} <-- and this

, а затем вам нужны запятые между каждой строкой в ​​массиве, например

"Australian (2)",
"Chinese (1)",
"European (3)",
"Spanish (1)",
"Greek (2)",
"Steak House (1)",
2 голосов
/ 16 мая 2011

Я думаю, вы забыли поставить запятые.И вы можете использовать это http://www.androidcompetencycenter.com/2009/10/json-parsing-in-android/

1 голос
/ 16 мая 2011

Это очень просто с Gson :

public class Foo
{
  static String jsonInput =
  "{" +
    "\"cuisine\": {" +
      "\"cuisine_names\": [" +
        "\"All (36)\"," +
        "\"Malaysian/ Singaporean (1)\"," +
        "\"Asian (1)\"," +
        "\"Australian (2)\"," +
        "\"Chinese (1)\"," +
        "\"European (3)\"," +
        "\"Spanish (1)\"," +
        "\"Greek (2)\"," +
        "\"Steak House (1)\"," +
        "\"Indian (1)\"," +
        "\"International (7)\"," +
        "\"Thai (1)\"," +
        "\"Italian (8)\"," +
        "\"Modern Australian (7)\"" +
      "]," +
      "\"price_ranges\": [" +
        "\"Any Price\"," +
        "\"$0-15\"," +
        "\"$15-30\"," +
        "\"$30+\"" +
      "]," +
      "\"times\": [" +
        "\"Any Time\"," +
        "\"05:30PM\"," +
        "\"06:00PM\"," +
        "\"06:30PM\"," +
        "\"07:00PM\"," +
        "\"07:30PM\"," +
        "\"08:00PM\"," +
        "\"08:30PM\"," +
        "\"09:00PM\"," +
        "\"09:30PM\"," +
        "\"10:00PM\"," +
        "\"10:30PM\"," +
        "\"11:00PM\"," +
        "\"11:30PM\"" +
      "]" +
    "}" + 
  "}";

  public static void main(String[] args)
  {
    GsonBuilder gsonBuilder = new GsonBuilder();
    Gson gson = gsonBuilder.create();
    CuisineContainer cc = gson.fromJson(jsonInput, CuisineContainer.class);
    System.out.println(cc);
  }
}

class CuisineContainer
{
  private Cuisine cuisine;

  @Override
  public String toString()
  {
    return cuisine.toString();
  }
}

class Cuisine
{
  private String[] cuisine_names;
  private String[] price_ranges;
  private String[] times;

  @Override
  public String toString()
  {
    StringBuilder result = new StringBuilder();
    result.append("cuisine_names: ");
    result.append(Arrays.asList(cuisine_names));
    result.append(System.getProperty("line.separator"));
    result.append("price_ranges: ");
    result.append(Arrays.asList(price_ranges));
    result.append(System.getProperty("line.separator"));
    result.append("times: ");
    result.append(Arrays.asList(times));
    return result.toString();
  }
}

Выход:

cuisine_names: [All (36), Malaysian/ Singaporean (1), Asian (1), Australian (2), Chinese (1), European (3), Spanish (1), Greek (2), Steak House (1), Indian (1), International (7), Thai (1), Italian (8), Modern Australian (7)]
price_ranges: [Any Price, $0-15, $15-30, $30+]
times: [Any Time, 05:30PM, 06:00PM, 06:30PM, 07:00PM, 07:30PM, 08:00PM, 08:30PM, 09:00PM, 09:30PM, 10:00PM, 10:30PM, 11:00PM, 11:30PM]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...