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);
代码的某些部分可能是多余的,但我稍后会处理。
答案 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解析之后。