我在将Json文件转换为Arraylist方面遇到问题,我使用了2种方法:
这是我的JSON:
[
{
"NICN":"1",
"DOB":"Thu Jan 01 00:00:00 SRET 1998",
"Gender":77,
"Module":[
{
"Module ID":"2",
"Assignment Score":0,
"Exam Score":0
},
{
"Module ID":"3",
"Assignment Score":0,
"Exam Score":0
},
{
"Module ID":"4",
"Assignment Score":0,
"Exam Score":0
}
],
"DOJ":"Wed Jan 01 00:00:00 SRET 1997",
"Nationality":"1",
"StudentID":"S000000",
"Name":"James"
}
]
这是第一个方法:JSON解析:
ArrayList<Student> CurStudentList = new ArrayList<>();
Student CurStudentObj = new Student();
//Read From File
try {
JSONArray baseJSONResponse = new JSONArray("JSON1.json");
for (int i = 0; i < baseJSONResponse.length(); i++) {
JSONObject StudentObj = baseJSONResponse.getJSONObject(i);
CurStudentObj.setmStudentID(StudentObj.getString("StudentID"));
CurStudentObj.setmName(StudentObj.getString("Name"));
CurStudentObj.setmGender(StudentObj.getString("Gender").charAt(0));
String TempDOB = (StudentObj.getString("DOB"));
SimpleDateFormat sdf = new SimpleDateFormat("EEE MM dd HH:mm:ss z yyyy");
try {
Date dDOB = sdf.parse(TempDOB);
CurStudentObj.setmDateOfBirth(dDOB);
} catch (ParseException e) {
e.printStackTrace();
}
CurStudentObj.setmNICN(StudentObj.getString("NICN"));
String TempDOJ = (StudentObj.getString("DOJ"));
try {
Date dDOJ = sdf.parse(TempDOJ);
CurStudentObj.setmDateJoined(dDOJ);
} catch (ParseException e) {
e.printStackTrace();
}
CurStudentObj.setmGender(StudentObj.getString("Gender").charAt(0));
JSONArray array = StudentObj.getJSONArray("Module");
for (int a = 0; a < 3; a++) {
JSONObject ArrayOne = new JSONObject();
CurStudentObj.setmModules((ArrayOne.getString("Module ID")), Integer.parseInt(ArrayOne.getString("Assignment Score")), Integer.parseInt(ArrayOne.getString("Exam Score")));
}
}
这是发生错误,可能是错误的解析:
org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
at org.json.JSONTokener.syntaxError(JSONTokener.java:432)
at org.json.JSONObject.<init>(JSONObject.java:184)
at org.json.JSONObject.<init>(JSONObject.java:310)
at Register.Student(Register.java:30)
at Main.main(Main.java:22)
我目前想在我的程序ArrayList中读取我的Json文件和存储。这样我就可以编辑信息,可以通过再次写入文件来更新。
我在网上搜索使用Gson的另一种方法,你不需要解析,只需添加到Arraylist中,但它只适用于ArrayList<String>
。不自定义ArrayList<Student>
答案 0 :(得分:0)
您在JSONArray()
- 构造函数中提供的字符串必须是json字符串。目前您只是传递了文件名。
要解决此问题,请执行以下步骤:
JSONArray()
- 构造函数答案 1 :(得分:0)
您可以使用Json解析器。因为现在编译器认为“JSON1.json”是json字符串,而它只是文件名。
在创建json对象时尝试此操作:
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader("yourFilePath"));
JSONObject jsonObject = (JSONObject) obj;
然后你会想到你的整个对象。
编辑:
之后你将拥有整个json对象,如果你仍然希望Json String传递给JSONArray方法,你可以通过JSON对象上的toString()方法获得它。
答案 2 :(得分:0)
不是将文件名传递给pthread_join
,而是必须在文件中读取并将其转换为类似的字符串:
JSONArray()