2016-10-24 14 views
0

私の配列の中に別の配列があり、混乱しているのでJSON配列の読み込みに問題があります。自分のコードを見てください。JAVAでJSON配列を読み取る

JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); 
    JSONObject obj = JSONFactoryUtil.createJSONObject(); 
    JSONObject jsonObjectReturn = JSONFactoryUtil.createJSONObject(); 

    //JSONOBJECT RETURN 
    JSONArray array = JSONFactoryUtil.createJSONArray(); 



     for (int i = 0; i < jsonArray.length(); i++) { 
      obj = jsonArray.getJSONObject(i); 

      callableStatement = (CallableStatement) conn 
        .prepareCall("{call TaxpaymentSPv2(?,?,?,?,?,?,?,?)}"); 


      callableStatement.setString(1, obj.getString("rdoCode")); 
      callableStatement.setString(2, obj.getString("rcoCode")); 
      callableStatement.setString(3, obj.getString("tpTin")); 
      callableStatement.setString(4, obj.getString("tpName")); 
      callableStatement.setString(5, obj.getString("tpAddress")); 
      callableStatement.setString(6, obj.getString("receiptType")); 
      callableStatement.registerOutParameter(7, Types.VARCHAR); 
      callableStatement.registerOutParameter(8, Types.VARCHAR); 

      callableStatement.executeUpdate(); 

      String rNo = callableStatement.getString(7); 
      String date = callableStatement.getString(8); 


      //---->This is my second Array inside my JSON where im having an error <------ 
      String checkArray = obj.getString("checkArray"); 
      JSONArray jsonArrayCheck = JSONFactoryUtil.createJSONArray(stringArray); 


      JSONArray jsonArray2 = jsonObject.getJSONArray("checkArray"); 
      System.out.println("..........." + jsonArray2); 

      jsonObjectReturn = JSONFactoryUtil.createJSONObject(); 
      jsonObjectReturn.put("rNo", rNo); 
      jsonObjectReturn.put("date", date); 
      array.put(jsonObjectReturn); 
     } 

     return array; 

ここに私のJSON入力です:

{ 
"dataArray": [{ 

"rdoCode": "001", 
"rcoCode": "002911", 
"tpTin": "200746409", 
"tpName": "JOHN DOE", 
"tpAddress": "LA CALIFORNIA", 
"receiptType":"ROR", 
"receiptMode":"AUTO", 
"manualReceiptNo":"", 
"checkArray":[{ 
"ptchkNumber": 14546, 
"ptchkDate": 2014-01-01, 
"ptchkAmount": 5332, 
"ptchkStatus": "" 
}] 
}] 
} 

私は私にこのエラーが発生します"checkArray"オブジェクトを解析することはできません。 com.liferay.portal.kernel.json.JSONException: org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]。誰かが私に何をするか教えてもらえますか?ありがとう。

JSONArray checkArray = obj.getJSONArray("checkArray"); 
JSONObject checkObj = checkArray.getJSONObject(0); 
int ptchkNumber = checkObj.getInt("ptchkNumber"); 

checkArrayキーためにはJSON内の配列なので、あなたの代わりにgetString()が、getJSONArray()を使用することはできません。次のコードに

String checkArray = obj.getString("checkArray"); 

+0

これは何語ですか? – user2182349

+0

@ user2182349私はJavaを使用しています – chiradee

+0

'' ptchkDate ":2014-01-01'は数字として扱われ、' ptchkDate'フィールドは値2012を持ちます。 – randominstanceOfLivingThing

答えて

2

あなたは、コードを変更する必要があります。

更新:

配列内の各オブジェクトを取得するには、各オブジェクトを反復してアクセスすることができます。

JSONArray checkArray = obj.getJSONArray("checkArray"); 
JSONObject checkObj; 
for (int itemIndex=0, totalObject = checkArray.length(); itemIndex < totalObject; itemIndex++) {  
    checkObj = checkArray.getJSONObject(itemIndex); 
    int ptchkNumber = checkObj.getInt("ptchkNumber"); 
} 
+0

ありがとう@Zamrony。これは私のために働く。私はフォローアップの質問があります。 'checkArray'キーの中に複数のエントリがあるとどうなりますか?たとえば、ptchkDate、ptchNumberなどの別のセット。これはどのように処理する必要がありますか?ありがとう。 – chiradee

+1

'checkArray'は配列内のオブジェクトの数を返す' length() 'メソッドを持っています。 'checkArray.getJONObject(itemIndex)'のようなものを使って各オブジェクトを取得することができます。 –

関連する問題