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.

Другие вопросы по тегам