2017-10-27 7 views
0

をArrayListにJSONファイルの変換、私は2つの方法を使用し私はArrayListにJSONファイルを変換する際に問題を抱えている<Custom>

[ 
    { 
     "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"))); 
      } 
    } 

これは間違って解析することができ、エラーが発生しました

私は現在、自分のプログラムArrayListの中に私のJsonファイルとストアを読みたいと思っています。私は情報を編集することができるので、ファイルに再度書き込むことによって更新することができます。

私はGsonを使用する別の方法をオンラインで検索しますが、構文解析する必要はなく、Arraylistに追加するだけですが、それはArrayList<String>でのみ機能します。カスタムではありませんArrayList<Student>

答えて

0

JSONArray()コンストラクタに与える文字列は、json文字列である必要があります。現在、ファイル名を渡したばかりです。ただ、次の手順を実装し、この問題を解決するには

  1. あなたのファイルを取得
  2. それは1つの文字列
  3. へのラインがJSONArray() -Constructor
  4. あなたが使用することができます
0

にその文字列を渡します読みますJsonパーサ。なぜなら、コンパイラはJSON1.jsonがJSON文字列であると考えているからです。これはファイル名だけです。代わりにあなたのJSONオブジェクトを作成するときに

はこれを試してみてください:

JSONParser parser = new JSONParser(); 

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

    JSONObject jsonObject = (JSONObject) obj; 

その後、あなたは私が思うあなたの全体のオブジェクトを持っています。

EDIT:その後

あなたはまだJSON文字列JSONArrayメソッドに渡したい場合は、JSONオブジェクトに対してtoString()メソッドでそれを得ることができ、あなたの全体のJSONオブジェクトを持っています。

0

代わりのファイルを読み込み、そのような文字列に変換する必要が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); 
関連する問題