2016-10-24 3 views
0

Ich habe ein Problem beim Lesen von JSON-Array, da sich in meinem Array ein anderes Array befindet und ich verwirrt bin. Bitte sehen Sie sich meinen Code an.Ein JSON-Array in JAVA lesen

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; 

Hier ist mein JSON-Eingang:

{ 
"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": "" 
}] 
}] 
} 

Ich kann das "checkArray" Objekt nicht analysieren, die mir diesen Fehler gibt. com.liferay.portal.kernel.json.JSONException: org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]. Kann mir jemand sagen, was ich tun soll? Vielen Dank.

+0

Welche Sprache ist das? – user2182349

+0

@ user2182349 Ich benutze Java – chiradee

+0

Ich glaube '" ptchkDate ": 2014-01-01' wird als eine Zahl behandelt und Ihr Feld 'ptchkDate' wird Wert 2012 haben. – randominstanceOfLivingThing

Antwort

2

Sie müssen Code ändern:

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

zu folgenden Code:

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

weil Schlüssel checkArray Array innerhalb JSON ist, so können Sie stattdessen getString() aber getJSONArray() nicht verwenden.

Update:

Um jedes Objekt innerhalb Array zu erhalten, können Sie durchlaufen und jedes Objekt zuzugreifen:

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

Danke @Zamrony. Das funktioniert für mich. Ich habe eine Follow-up-Frage. Was passiert, wenn ich mehrere Einträge in meinem 'checkArray' Schlüssel habe? Zum Beispiel eine weitere Menge von ptchkDate, ptchNumber usw. Wie soll ich damit umgehen? Vielen Dank. – chiradee

+1

'checkArray' have' length() 'Methode, die zurückgibt, wie viele Objekte innerhalb des Arrays sind. Sie können iterieren, um jedes Objekt mithilfe von 'checkArray.getJONObject (itemIndex)' zu erhalten –