【问题标题】:Converting Json File to ArrayList<Custom>将 Json 文件转换为 ArrayList<Custom>
【发布时间】:2017-10-27 09:45:37
【问题描述】:

我在将 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&lt;String&gt;。非自定义ArrayList&lt;Student&gt;

【问题讨论】:

    标签: java json parsing arraylist


    【解决方案1】:

    您在JSONArray()-Constructor 中输入的字符串必须是 json 字符串。目前您刚刚传递了文件名。

    要解决这个问题,只需执行以下步骤:

    1. 获取您的文件
    2. 将它的行读入 1 个单个字符串
    3. 将该字符串传递给JSONArray()-Constructor

    【讨论】:

      【解决方案2】:

      您必须读取文件并将其转换为这样的字符串,而不是将文件名传递给JSONArray()

      //Read the stream
      InputStream is = new FileInputStream(jsonFilename);
      
      //Convert to string
      String jsonTxt = IOUtils.toString(is);
      
      //Create JSONArray from read JSON string
      JSONArray arr = new JSONArray(jsonTxt);
      

      【讨论】:

        【解决方案3】:

        您可以使用 Json 解析器。因为现在编译器认为“JSON1.json”是json字符串,而它只是文件名。

        在创建 json 对象时试试这个:

            JSONParser parser = new JSONParser();
        
            Object obj = parser.parse(new FileReader("yourFilePath"));
        
            JSONObject jsonObject =  (JSONObject) obj;
        

        我想你会得到你的整个对象。

        编辑:

        之后,您将拥有整个 json 对象,如果您仍希望将 Json 字符串传递给 JSONArray 方法,您可以通过 JSON 对象上的 toString() 方法获取它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-27
          • 1970-01-01
          • 2014-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多