java.lang.IllegalStateException:预期的BEGIN_OBJECT错误

时间:2012-01-26 22:40:55

标签: java

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 个答案:

答案 0 :(得分:1)

您正在拨打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"}

没有多余的+"字符。

答案 1 :(得分:0)

除了@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;
        }

输出=

  

jdata.txt中的JSonString = {“users”:“john”}

     

用户:john //在json解析之后。