REMARQUE :comme mentionné dans la question précédente, la chaîne JSON donnée doit être au format correct, c'est-à-dire avoir une clé pour chaque objet (connexion, comptes) ou les avoir dans un seul tableau (entrée). Je donne une solution pour les deux options.
Novice, je vous propose 2 méthodes distinctes afin que vous puissiez gérer la chaîne JSON entrante en fonction de la façon dont vous la construisez, soit 2 objets dans une seule chaîne JSON, soit 2 objets dans un tableau JSON.
Vous pouvez choisir votre solution :)
Essayez le code, faites-moi savoir si vous avez besoin de plus d'aide et acceptez la réponse.
OPTION1 :2 objets dans une seule chaîne JSON
{
"login":{
"error":false,
"user":{
"br_code":12,
"mem_id":13,
"username":"novalyn",
"email":"[email protected]",
"created_at":"2016-07-22 09:05:21"
}
},
"accounts":{
"error":false,
"sl_summ":[
{
"sl_desc":"PA : Savings Account",
"tr_date":"2015-08-17",
"actual_balance":"483.67",
"available_balance":"483.67"
},
{
"sl_desc":"PA : Savings - Cash Bond",
"tr_date":"2015-08-28",
"actual_balance":"10129.43",
"available_balance":"10129.43"
}
]
}
}
OPTION2 :2 objets dans une seule chaîne de tableau JSON
{
"input":[
{
"error":false,
"user":{
"br_code":12,
"mem_id":13,
"username":"novalyn",
"email":"[email protected]",
"created_at":"2016-07-22 09:05:21"
}
},
{
"error":false,
"sl_summ":[
{
"sl_desc":"PA : Savings Account",
"tr_date":"2015-08-17",
"actual_balance":"483.67",
"available_balance":"483.67"
},
{
"sl_desc":"PA : Savings - Cash Bond",
"tr_date":"2015-08-28",
"actual_balance":"10129.43",
"available_balance":"10129.43"
}
]
}
]
}
Code pour gérer les deux scénarios (OPTION1 et OPTION2) de JSON String
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public static void jsonExample() {
// OPTION 1
String twoObjectString = "{ \"login\":{ \"error\":false, \"user\":{ \"br_code\":12, \"mem_id\":13, \"username\":\"novalyn\", \"email\":\"[email protected]\", \"created_at\":\"2016-07-22 09:05:21\" } }, \"accounts\":{ \"error\":false, \"sl_summ\":[ { \"sl_desc\":\"PA : Savings Account\", \"tr_date\":\"2015-08-17\", \"actual_balance\":\"483.67\", \"available_balance\":\"483.67\" }, { \"sl_desc\":\"PA : Savings - Cash Bond\", \"tr_date\":\"2015-08-28\", \"actual_balance\":\"10129.43\", \"available_balance\":\"10129.43\" } ] } }\n";
// OPTION 2
String arrayString = "{ \"input\": [ { \"error\":false, \"user\":{ \"br_code\":12, \"mem_id\":13, \"username\":\"novalyn\", \"email\":\"[email protected]\", \"created_at\":\"2016-07-22 09:05:21\" } }, { \"error\":false, \"sl_summ\":[ { \"sl_desc\":\"PA : Savings Account\", \"tr_date\":\"2015-08-17\", \"actual_balance\":\"483.67\", \"available_balance\":\"483.67\" }, { \"sl_desc\":\"PA : Savings - Cash Bond\", \"tr_date\":\"2015-08-28\", \"actual_balance\":\"10129.43\", \"available_balance\":\"10129.43\" } ] } ] }\n";
try {
Log.d("TEST", "COMBINED 2 OBJECTS ");
Log.d("TEST", "INPUT String : " + twoObjectString);
JSONObject twoJSONObjects = new JSONObject(twoObjectString);
handleTwoObjects(twoJSONObjects);
Log.d("TEST", "2 OBJECTS IN ARRAY ");
Log.d("TEST", "INPUT String " + arrayString);
JSONObject arrayJSONObject = new JSONObject(arrayString);
handleArrayOfObjects(arrayJSONObject);
} catch (Exception exception) {
Log.d("TEST", exception.toString());
}
}
// OPTION 1
public static void handleTwoObjects(JSONObject jsonObject) throws Exception {
// read the json string into a json object
Log.d("TEST", "JSON String : " + jsonObject.toString());
if (!jsonObject.isNull("login")) {
JSONObject loginObject = (JSONObject) jsonObject.get("login");
// access individual json object thru jsonObject.get("FIELD_NAME")
Log.d("TEST", "-error attribute : " + loginObject.get("error").toString());
// Check if its login data i.e. user present
if (!loginObject.isNull("user")) {
// handle user login data
JSONObject userJSONObject = (JSONObject) loginObject.get("user");
Log.d("TEST", "User : " + userJSONObject.toString());
Log.d("TEST", "-br_code attribute : " + userJSONObject.get("br_code").toString());
Log.d("TEST", "-mem_id attribute : " + userJSONObject.get("mem_id").toString());
Log.d("TEST", "-username attribute : " + userJSONObject.get("username").toString());
Log.d("TEST", "-email attribute : " + userJSONObject.get("email").toString());
Log.d("TEST", "-created_at attribute : " + userJSONObject.get("created_at").toString());
// Check if its account data i.e. sl_summ is present
} else {
// a new JSON string that doesn't have user in login Object
Log.d("TEST", "Unknown JSON String : " + loginObject.toString());
}
}
if (!jsonObject.isNull("accounts")) {
JSONObject accountsObject = (JSONObject) jsonObject.get("accounts");
// access individual json object thru jsonObject.get("FIELD_NAME")
Log.d("TEST", "-error attribute : " + accountsObject.get("error").toString());
JSONArray slArray = accountsObject.optJSONArray("sl_summ");
// Check if its login data i.e. user present
if (slArray != null) {
// handle account data
JSONArray array = ((JSONArray)accountsObject.getJSONArray("sl_summ"));
// access individual json array thru jsonObject.getJSONArray("FIELD_NAME")
Log.d("TEST", "-sl_summ array : " + accountsObject.getJSONArray("sl_summ").toString());
for (int index=0; index<array.length(); index++) {
JSONObject object = (JSONObject)array.get(index);
Log.d("TEST", "-sl_desc attribute : " + object.get("sl_desc").toString());
Log.d("TEST", "-tr_date attribute : " + object.get("tr_date").toString());
Log.d("TEST", "-actual_balance attribute : " + object.get("actual_balance").toString());
Log.d("TEST", "-available_balance attribute : " + object.get("available_balance").toString());
Log.d("TEST", "---------------------------------");
}
} else {
// a new JSON string that doesn't have sl_summ as member variable so display it and write new handler code
Log.d("TEST", "Unknown JSON String : " + jsonObject.toString());
}
}
}
// OPTION 2
public static void handleArrayOfObjects(JSONObject jsonObject) throws Exception {
// read the json string into a json object
Log.d("TEST", "JSON String : " + jsonObject.toString());
JSONArray inputArray = jsonObject.optJSONArray("input");
if (inputArray != null && inputArray.length() > 0) {
for (int oindex = 0; oindex < inputArray.length(); oindex++) {
JSONObject currentObject = (JSONObject) inputArray.get(oindex);
JSONArray slArray = currentObject.optJSONArray("sl_summ");
// access individual json object thru jsonObject.get("FIELD_NAME")
Log.d("TEST", "-error attribute : " + currentObject.get("error").toString());
// Check if its login data i.e. user present
if (!currentObject.isNull("user") && slArray == null) {
// handle user login data
JSONObject userJSONObject = (JSONObject) currentObject.get("user");
Log.d("TEST", "User : " + userJSONObject.toString());
Log.d("TEST", "-br_code attribute : " + userJSONObject.get("br_code").toString());
Log.d("TEST", "-mem_id attribute : " + userJSONObject.get("mem_id").toString());
Log.d("TEST", "-username attribute : " + userJSONObject.get("username").toString());
Log.d("TEST", "-email attribute : " + userJSONObject.get("email").toString());
Log.d("TEST", "-created_at attribute : " + userJSONObject.get("created_at").toString());
// Check if its account data i.e. sl_summ is present
} else if (slArray != null && currentObject.isNull("user")) {
// handle account data
JSONArray array = ((JSONArray)currentObject.getJSONArray("sl_summ"));
// access individual json array thru jsonObject.getJSONArray("FIELD_NAME")
Log.d("TEST", "-sl_summ array : " + currentObject.getJSONArray("sl_summ").toString());
for (int index=0; index<array.length(); index++) {
JSONObject object = (JSONObject)array.get(index);
Log.d("TEST", "-sl_desc attribute : " + object.get("sl_desc").toString());
Log.d("TEST", "-tr_date attribute : " + object.get("tr_date").toString());
Log.d("TEST", "-actual_balance attribute : " + object.get("actual_balance").toString());
Log.d("TEST", "-available_balance attribute : " + object.get("available_balance").toString());
Log.d("TEST", "---------------------------------");
}
} else {
// a new JSON string that doesn't have user or sl_summ as member variable so display it and write new handler code
Log.d("TEST", "Unknown JSON String : " + jsonObject.toString());
}
}
}
}
Exemples de journaux pour OPTION1 et OPTION2
07-05 20:21:58.001 8178-8178/? D/TEST: COMBINED 2 OBJECTS
07-05 20:21:58.001 8178-8178/? D/TEST: INPUT String : { "login":{ "error":false, "user":{ "br_code":12, "mem_id":13, "username":"novalyn", "email":"[email protected]", "created_at":"2016-07-22 09:05:21" } }, "accounts":{ "error":false, "sl_summ":[ { "sl_desc":"PA : Savings Account", "tr_date":"2015-08-17", "actual_balance":"483.67", "available_balance":"483.67" }, { "sl_desc":"PA : Savings - Cash Bond", "tr_date":"2015-08-28", "actual_balance":"10129.43", "available_balance":"10129.43" } ] } }
07-05 20:21:58.001 8178-8178/? D/TEST: JSON String : {"login":{"error":false,"user":{"br_code":12,"mem_id":13,"username":"novalyn","email":"[email protected]","created_at":"2016-07-22 09:05:21"}},"accounts":{"error":false,"sl_summ":[{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"},{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}]}}
07-05 20:21:58.001 8178-8178/? D/TEST: -error attribute : false
07-05 20:21:58.001 8178-8178/? D/TEST: User : {"br_code":12,"mem_id":13,"username":"novalyn","email":"[email protected]","created_at":"2016-07-22 09:05:21"}
07-05 20:21:58.001 8178-8178/? D/TEST: -br_code attribute : 12
07-05 20:21:58.001 8178-8178/? D/TEST: -mem_id attribute : 13
07-05 20:21:58.001 8178-8178/? D/TEST: -username attribute : novalyn
07-05 20:21:58.001 8178-8178/? D/TEST: -email attribute : [email protected]
07-05 20:21:58.001 8178-8178/? D/TEST: -created_at attribute : 2016-07-22 09:05:21
07-05 20:21:58.001 8178-8178/? D/TEST: -error attribute : false
07-05 20:21:58.001 8178-8178/? D/TEST: -sl_summ array : [{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"},{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}]
07-05 20:21:58.002 8178-8178/? D/TEST: -sl_desc attribute : PA : Savings Account
07-05 20:21:58.002 8178-8178/? D/TEST: -tr_date attribute : 2015-08-17
07-05 20:21:58.002 8178-8178/? D/TEST: -actual_balance attribute : 483.67
07-05 20:21:58.002 8178-8178/? D/TEST: -available_balance attribute : 483.67
07-05 20:21:58.002 8178-8178/? D/TEST: ---------------------------------
07-05 20:21:58.002 8178-8178/? D/TEST: -sl_desc attribute : PA : Savings - Cash Bond
07-05 20:21:58.002 8178-8178/? D/TEST: -tr_date attribute : 2015-08-28
07-05 20:21:58.002 8178-8178/? D/TEST: -actual_balance attribute : 10129.43
07-05 20:21:58.002 8178-8178/? D/TEST: -available_balance attribute : 10129.43
07-05 20:21:58.002 8178-8178/? D/TEST: ---------------------------------
07-05 20:21:58.002 8178-8178/? D/TEST: 2 OBJECTS IN ARRAY
07-05 20:21:58.002 8178-8178/? D/TEST: INPUT String { "input": [ { "error":false, "user":{ "br_code":12, "mem_id":13, "username":"novalyn", "email":"[email protected]", "created_at":"2016-07-22 09:05:21" } }, { "error":false, "sl_summ":[ { "sl_desc":"PA : Savings Account", "tr_date":"2015-08-17", "actual_balance":"483.67", "available_balance":"483.67" }, { "sl_desc":"PA : Savings - Cash Bond", "tr_date":"2015-08-28", "actual_balance":"10129.43", "available_balance":"10129.43" } ] } ] }
07-05 20:21:58.002 8178-8178/? D/TEST: JSON String : {"input":[{"error":false,"user":{"br_code":12,"mem_id":13,"username":"novalyn","email":"[email protected]","created_at":"2016-07-22 09:05:21"}},{"error":false,"sl_summ":[{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"},{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}]}]}
07-05 20:21:58.002 8178-8178/? D/TEST: -error attribute : false
07-05 20:21:58.002 8178-8178/? D/TEST: User : {"br_code":12,"mem_id":13,"username":"novalyn","email":"[email protected]","created_at":"2016-07-22 09:05:21"}
07-05 20:21:58.002 8178-8178/? D/TEST: -br_code attribute : 12
07-05 20:21:58.002 8178-8178/? D/TEST: -mem_id attribute : 13
07-05 20:21:58.002 8178-8178/? D/TEST: -username attribute : novalyn
07-05 20:21:58.002 8178-8178/? D/TEST: -email attribute : [email protected]
07-05 20:21:58.002 8178-8178/? D/TEST: -created_at attribute : 2016-07-22 09:05:21
07-05 20:21:58.002 8178-8178/? D/TEST: -error attribute : false
07-05 20:21:58.002 8178-8178/? D/TEST: -sl_summ array : [{"sl_desc":"PA : Savings Account","tr_date":"2015-08-17","actual_balance":"483.67","available_balance":"483.67"},{"sl_desc":"PA : Savings - Cash Bond","tr_date":"2015-08-28","actual_balance":"10129.43","available_balance":"10129.43"}]
07-05 20:21:58.002 8178-8178/? D/TEST: -sl_desc attribute : PA : Savings Account
07-05 20:21:58.002 8178-8178/? D/TEST: -tr_date attribute : 2015-08-17
07-05 20:21:58.002 8178-8178/? D/TEST: -actual_balance attribute : 483.67
07-05 20:21:58.002 8178-8178/? D/TEST: -available_balance attribute : 483.67
07-05 20:21:58.002 8178-8178/? D/TEST: ---------------------------------
07-05 20:21:58.002 8178-8178/? D/TEST: -sl_desc attribute : PA : Savings - Cash Bond
07-05 20:21:58.002 8178-8178/? D/TEST: -tr_date attribute : 2015-08-28
07-05 20:21:58.002 8178-8178/? D/TEST: -actual_balance attribute : 10129.43
07-05 20:21:58.002 8178-8178/? D/TEST: -available_balance attribute : 10129.43
07-05 20:21:58.002 8178-8178/? D/TEST: ---------------------------------
Je n'ai pas accès à tous les fichiers PHP internes que je peux utiliser pour exécuter votre code PHP, j'ai donc remplacé la plupart des appels de fonction par des valeurs codées en dur telles que partagées dans l'exemple de charge utile de réponse. Voici le code pour générer des objets JSON au format OPTION1.
En bref, vous devez ajouter ["login"] et ["accounts"] devant tous les sous-attributs dans $response afin qu'ils soient regroupés dans le bon objet JSON et vous aurez deux objets JSON qui peuvent être analysés ci-dessus code partagé Android.
<?php
// json response array
$br_response = array("error" => FALSE);
$sl_response["error"] = FALSE;
$sl_response["sl_summ"] = array();
$arclass = "13";
$loanclass = "12";
$accintreceivable = "21";
// user is found
$response["login"]["error"] = FALSE;
$response["login"]["user"]["br_code"] = 12;
$response["login"]["user"]["mem_id"] = 13;
$response["login"]["user"]["username"] = "novalyn";
$response["login"]["user"]["email"] = "[email protected]";
$response["login"]["user"]["created_at"] = "2016-07-22 09:05:21";
for($i = 0; $i < 2; $i++){
$item = array();
$item["sl_desc"] = "PA : Savings Account";
$item["tr_date"] = "2015-08-17";
$item["actual_balance"] = "483.67";
$item["available_balance"] = "483.67";
$sl_response["sl_summ"][] = $item;
}
$response["accounts"] = $sl_response;
json_encode($response);
echo json_encode($response, true);
PHP Sample Run a généré une réponse JSON (OPTION1)
{
"login":{
"error":false,
"user":{
"br_code":12,
"mem_id":13,
"username":"novalyn",
"email":"[email protected]",
"created_at":"2016-07-22 09:05:21"
}
},
"accounts":{
"error":false,
"sl_summ":[
{
"sl_desc":"PA : Savings Account",
"tr_date":"2015-08-17",
"actual_balance":"483.67",
"available_balance":"483.67"
},
{
"sl_desc":"PA : Savings Account",
"tr_date":"2015-08-17",
"actual_balance":"483.67",
"available_balance":"483.67"
}
]
}
}
Le code sera disponible pendant quelques jours sur https://codepad.remoteinterview.io/YJJKVUEAAH