NOTA :come menzionato nella domanda precedente, la stringa JSON fornita deve essere nel formato corretto, ovvero avere una chiave per ogni oggetto (accesso, account) o averli in un singolo array (input). Sto dando una soluzione per entrambe le opzioni.
Principiante, ti sto fornendo 2 metodi separati in modo da poter gestire la stringa JSON in entrata a seconda di come la costruisci 2 oggetti in una singola stringa JSON o 2 oggetti in un array JSON.
Puoi scegliere la tua soluzione :)
Prova il codice, fammi sapere se hai bisogno di ulteriore aiuto e accetta la risposta.
OPZIONE1:2 oggetti in una singola stringa 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"
}
]
}
}
OPZIONE2:2 oggetti in una singola stringa di array 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"
}
]
}
]
}
Codice per gestire entrambi gli scenari (OPTION1 &OPTION2) di 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());
}
}
}
}
Registri di esempio per OPTION1 e 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: ---------------------------------
Non ho accesso a tutti i file PHP interni che posso utilizzare per eseguire il codice PHP, quindi ho sostituito la maggior parte di tutte le chiamate di funzione con valori codificati come condivisi nel payload di risposta del campione. Ecco il codice per generare oggetti JSON nel formato OPTION1.
In breve, devi aggiungere ["login"] e ["accounts"] prima di tutti gli attributi secondari in $response in modo che vengano raggruppati nell'oggetto JSON corretto e avrai due oggetti JSON che possono essere analizzati sopra codice condiviso 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);
Risposta JSON generata da PHP Sample Run (OPZIONE1)
{
"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"
}
]
}
}
Il codice sarà disponibile per pochi giorni su https://codepad.remoteinterview.io/YJJKVUEAAH