Доброго времени суток. Хочу распарсить вот такой json-файл.
Сам код для этого дела:
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.http.ParseException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.FileReader;
public class JSONtest {
public static void main(String args[]) throws Exception {
JSONtest jsonTest = new JSONtest();
Object ads[] = jsonTest.getAd();
Integer noneAds = 0;
for (int i = 1; i <ads.length; i++) {
if (ads[i].equals(noneAds)) {
System.out.println("Bingo");
}
}
}
public Object[] getAd() throws Exception {
BufferedReader bufferedReader = new BufferedReader(new FileReader("C:/TAP/src/main/resources/vk.json"));
JsonParser parser = new JsonParser();
Object [] ads = new Object[7];
try {
JsonObject jsonResp = (JsonObject) parser.parse(bufferedReader);
JsonArray postsList = (JsonArray) jsonResp.get("response");
JsonObject unicPost = null;
JSONObject jsonObject;
for (int i = 1; i < postsList.size(); i++) {
unicPost = (JsonObject) postsList.get(i);
ads[i] = unicPost.get("marked_as_ads");
System.out.println("Ads from sub " + ads[i]);
}
} catch (ParseException e) {e.printStackTrace();}
return ads;
}
}
В main'e хочу сравнить полученные данные из метода getAds со значением 0 типа Integer, но так как они разного типа в результате получается false, там где должно быть true; Пытался скастовать, но всегда вылетала ClassCastException. Что можно сделать?
Вариант 1
Вы используете метод public JsonElement get(String memberName)
.
У вас все верно написано, но значения корректнее сохранять в JsonElement
при начитке, а точнее в массив JsonElement[]
То есть так:
JsonElement[] ads = new JsonElement[7];
Тогда начитка в цикле останется такой же как у вас.
Далее, массив JsonElement[] json
вы можете конвертировать методом JsonElement.getAsInt()
.
То есть так:
int variable = ads[i].getAsInt();
Вариант 2
Или сразу сохраняйте значения в массив int[] ads
через метод .getAsInt()
.
То есть так:
...
ads[i] = unicPost.get("marked_as_ads").getAsInt();
...
Попробуйте воспользоваться методом:
int getInt (String name)
вместо:
Object get (String name)
То есть будет вот так:
ads[i] = unicPost.getInt("marked_as_ads");
Соответственно, придется поменять тип массива на int[]
.
Далее можно работать с примитивами и сравнить их оператором ==
.
Зачем записывать в массив JSON данные, если можно их превратить в строку. Попробуйте так:
ads[i] = unicPost.get("marked_as_ads").getAsString();
Массив при этом объявите как String[].
А дальше уже, если нужно обязательно сравнить с Integer, то можете к строке применить Integer.parseInt(String s) и получить из строки число.
http://stackoverflow.com/questions/34120882/gson-jelement-getasstring-vs-jelement-tostring
Кстати, есть метод getAsInt(). Так что можно сразу получать число. Только в Вашем файле не все данные числовые. Строка в этом смысле как-то универсальнее.
https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonElement.html
Виртуальный выделенный сервер (VDS) становится отличным выбором