Разбор JSON для Android - вложенные элементы? - PullRequest
4 голосов
/ 06 января 2012

Я использовал этот сайт в течение многих лет, но никогда не публиковал.Я озадачен и надеюсь, что кто-то сможет мне помочь.

Я использую код, очень похожий на то, что Slicekick разместил здесь Приложение для анализа JSON "нет данных"? , но, похоже, не могувыяснить, как разобрать этот файл JSON.Я отредактировал его информацию JSON, чтобы отразить точный формат, который я пытаюсь проанализировать, чтобы сэкономить пространство / время.Как мне разобрать «Результаты», чтобы я мог запросить «Имя» и «Тип»?Как и его проблема с «Similar» и «Info», как мне проанализировать «Info» и «Results» в файле ниже?

Вот пример файла JSON, отредактированного в точном формате, который я использую:

{
"head": {
    "title": "Music",
    "status": "200"
},
"Info": [
    {
        "Name": "Mos Def",
        "Type": "music",
        "Results": [
            {
                "Name": "Talib Kweli",
                "Type": "music"
            },
            {
                "Name": "Black Star",
                "Type": "music"
            },
            {
                "Name": "Little Brother",
                "Type": "music"
            }
         ]
    }, 
    {
        "Name": "Mos Def",
        "Type": "Vehicles",
        "Results": [
            {
                "Name": "Chevy",
                "Type": "Car"
            },
            {
                "Name": "Ford",
                "Type": "Car"
            },
            {
                "Name": "Pontiac",
                "Type": "Car"
            }
         ]
      }
   ]
}

Часть моего кода, которая может представлять интерес:

... я делаю httpget ... который встроен в StringBuilder ... создает JSONObjectс результатами StringBuilder

   jArray = new JSONObject(result);

... затем возвращает это

Затем на ...

   JSONArray  Info = json.optJSONArray("Info");

   System.out.println("HERE IS INFO: ");
   System.out.println(Info);
   //System.out.println("HERE IS RESULTS: ");
   //System.out.println(Results);

И, в основном, здесь я нахожусь в тупике.Я вставил печатные сообщения, чтобы попытаться сузить проблему.

Анализ "Info" позволяет мне искать: "Имя": "Mos Def" "Тип": "музыка" -и- "Имя":"Mos Def" "Тип": "Транспортные средства"

Замена поиска "Информация" на "Результаты" не дает мне никаких данных.(Не найдено)

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 06 января 2012

Это точно, потому что Results - это JSONArray внутри JSONArray Info.Поэтому вы должны попробовать что-то вроде этого,

JSONArray  Info = json.optJSONArray("Info");
JSONArray Results = null;
for (int i = 0; i < array.length(); i++) {
            JSONObject object = Info.getJSONObject(i);
            Results results = object.getJSONArray("Results");
        }
1 голос
/ 06 января 2012

Вы должны позвонить по вашему коду синтаксического анализа, как показано ниже:

jArray = new JSONObject(result);
for(int i=0;i<jArray.length();i++)
{
    JSONArray  Info = json.optJSONArray("Info");
    for(int j=0;j<Info.length();j++){
    {
         System.out.println("HERE IS INFO: ");
         System.out.println(Info);
         //System.out.println("HERE IS RESULTS: ");
         JSONObject obj=Info.getJSONObject(j);
         JSONArray results=obj.getJSONArray("Results");
         for(int k=0; k<results.length();
         {
             //Process Results
         }
}
0 голосов
/ 06 января 2012

Лучше использовать GSON, его от Google и разбор JSON, используя его - это просто пирог! !!Вот хороший учебник, чтобы начать его, вы будете более счастливы, используя GSON.

Ссылка на учебник GSON

...