将Json文件转换为ArrayList <custom>

时间:2017-10-27 09:45:37

标签: java json parsing arraylist

我在将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>

3 个答案:

答案 0 :(得分:0)

您在JSONArray() - 构造函数中提供的字符串必须是json字符串。目前您只是传递了文件名。

要解决此问题,请执行以下步骤:

  1. 获取文件
  2. 将它的行读入1个单字符串
  3. 将该字符串传递给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()