java.lang.IllegalStateException: ожидаемая ошибка BEGIN_OBJECT
class Talk {
String[] values;
try {
InputStream is = getAssets().open("jdata.txt");
DataInputStream in = new DataInputStream(is);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
//Read File Line By Line
while ((br.readLine()) != null) {
// Print the content on the console
strLine = strLine + br.readLine();
}
} catch (Exception e) { //Catch exception if any
System.err.println("Error: " + e.getMessage());
}
parse(strLine);
}
public void parse(String jsonLine) {
Data data = new Gson().fromJson(jsonLine, Data.class);
values[0]= data.toString();
return;
}
}
Это в jdata.txt
:
"{" + "'users':'john' + "}"
Это мое Data.java
:
public class Data {
public String users;
}
Я получаю ошибку:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 9
Может кто-нибудь объяснить мне, что означает эта ошибка и как ее устранить?
РЕДАКТИРОВАТЬ:
Я получил ответ. Это те хитрости, которые мне пришлось сделать. Сначала измените массив String на список массивов.
List<String> values = new ArrayList<String>();
Следующая настройка была здесь:
strLine = currentLine;
currentLine = br.readLine();
//Read File Line By Line
while (currentLine != null) {
// Print the content on the console
strLine = strLine + currentLine;
currentLine = br.readLine();
}
Последний твик был здесь:
String val = data.toString();
values.add(val);
Некоторые части кода могут быть избыточными, но я позабочусь об этом позже.
2 ответа
Ты звонишь readLine()
дважды. Следующее вызывает чтение строки из файла и потерю:
while ((br.readLine()) != null) {
Измените цикл на:
//Read File Line By Line
String currentLine = br.readLine();
while (currentLine != null) {
// Print the content on the console
strLine = strLine + currentLine;
currentLine = br.readLine();
}
Кроме того, содержание jdata.txt
должно быть:
{"users":"john"}
без лишнего +
или же "
персонажи.
Кроме проблемы, упомянутой @Eli.
Это способ использования Gson Library
разобрать JSON.
Gson gson = new Gson();
Data data = gson.fromJson(jsonLine, Data.class);
System.out.println("users:" + data.getusers());
Теперь мой файл Data.java
public class Data {
public String users;
public String getusers() {
return users;
}
Выход =
JSonString in jdata.txt = {"users": "john"}
пользователи: джон // после разбора json.