2012-05-22 3 views
0

Я довольно новичок в парсере JSON, и я пытаюсь извлечь все данные из тега «размеры», т. Е. Извлекать значения (небольшие, да, xsmall, NO, Medium и yes) из файла JSON в сложном вложенном цикле, но не работает. Я использую GSON для разбора файла JSON и использование JAVA в качестве языка программированияИзвлечение всех значений из вложенных JSON

Вот как выглядит файл JSON, как в общем

{ response: "ok", 
    prodinfo: { 
    sizes: [ 
     { size:"small", 
     available: "yes" 
     }, 
     { size:"xsmall", 
     available: "No" 
     }, 
     { size:"Medium", 
     available: "yes" 
     } 
    ] 
    } 
} 

Это то, что я сделал

int array = jsonParser14.parse(json14).getAsJsonObject().get("ProdInfo").getAsJsonObject().getAsJsonArray("sizes").size(); 
JsonArray sizes = (JsonArray) jsonParser15.parse(json15).getAsJsonObject().get("ProdInfo").getAsJsonObject().getAsJsonArray("sizes"); 
for (int i = 0; i <= array; i++) { 
    String size = sizes.get(i).getAsString(); 
    System.out.println("data extracted are: " + size); 
} 

Ваша помощь будет быть оцененным. Благодаря

+1

Покажите свой цикл тоже. – Jivings

+0

У вас есть классы, в которых хранятся эти данные? Если это так, вам не нужен цикл. Есть много способов сделать это, показать нам, что вы пробовали. –

+0

привет, ребята. Я только что добавил парсер и цикл GSON, которые я сделал. Любая идея будет оценена по достоинству. – sgamer

ответ

0

Что-то вроде:

var sizes = json.prodinfo.sizes; 
for (item in sizes) { 
    if (sizes.hasOwnProperty(item)) { 
     var isAvailable = sizes[item].available; 
     alert(isAvailable); 
    } 

}​ 

Пример здесь: http://jsfiddle.net/nG88B/3/

Редактировать: Похоже, что вам нужно разобрать JSON первым. В этом случае (если она действует), вы можете сделать:

var obj = JSON.parse(jsonStr); 
+0

ОП пытается разобрать в java, используя gson. –

1

Я обычно лечат это путем публичного класса с необходимыми полями:

public class ProdSize { 
    public String size; 
    public String available; 
} 

public class ProdInfo { 
    public ProdSize[] sizes; 
} 

public class Message { 
    public String response; 
    public ProdInfo prodinfo; 
} 

А потом я просто должен сделать это в gson:

Gson gson = new GsonBuilder().create(); 
Message mess = gson.fromJson(theJsonString, Message.class); 

Тогда у меня нет петли для анализа JSON. Я непосредственно мои размеры в

mess.prodinfo.sizes 

Например, вы можете напечатать их, как этот

for (int i=0; i<mess.prodinfo.sizes.length; i++) { 
    ProdSize size = mess.prodinfo.sizes[i]; 
    System.out.println("Size " + size.size + " -> " + size.available); 
} 
+0

Привет, Дыстрой. спасибо за ответ, но я не могу извлечь каждое поле в размерах из вашей идеи. Можно ли показать мне, как вы это делаете? Прямо сейчас, когда я запускаю код ниже, я получаю вывод как «[Lgsonparser $ ProdSize; @ 787171» \t \t JsonParser jsonParser = new JsonParser(); \t \t FileReader json = new FileReader ("h: \\ test.json"); \t \t JsonElement theJsonString = jsonParser.parse (json); \t \t Gson gson = new GsonBuilder(). Create(); \t \t Сообщение mess = gson.fromJson (theJsonString, Message.class); \t \t System.out.println (mess.prodinfo.sizes); \t} \t \t \t} \t} – sgamer

+0

Я закончил свой ответ с петлей, чтобы показать, как можно перебирать. –

+0

Большое спасибо.Очень благодарен – sgamer

Смежные вопросы