OPMERKING :zoals vermeld in de vorige vraag, moet de gegeven JSON-tekenreeks de juiste indeling hebben, d.w.z. ofwel een sleutel hebben voor elk object (login, accounts) of ze in een enkele array (invoer) hebben. Ik geef een oplossing voor beide opties.
Beginner, ik bied je 2 afzonderlijke methoden zodat je inkomende JSON-string kunt verwerken, afhankelijk van hoe je het ofwel 2 objecten in een enkele JSON String of 2 objecten in een JSON-array construeert.
U kunt uw oplossing kiezen :)
Probeer de code, laat het me weten als je meer hulp nodig hebt en accepteer het antwoord.
OPTIE1:2 objecten in één JSON-tekenreeks
{
"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"
}
]
}
}
OPTIE2:2 objecten in een enkele JSON-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"
}
]
}
]
}
Code om beide scenario's (OPTIE1 &OPTIE2) van JSON String af te handelen
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());
}
}
}
}
Voorbeeldlogboeken voor OPTIE1 &OPTIE2
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: ---------------------------------
Ik heb geen toegang tot alle interne PHP-bestanden die ik kan gebruiken om uw PHP-code uit te voeren, dus ik heb vooral de functieaanroepen vervangen door hardgecodeerde waarden zoals gedeeld in de payload van de voorbeeldrespons. Hier is de code om JSON-objecten in OPTION1-indeling te genereren.
Kortom, u moet ["login"] en ["accounts"] toevoegen vóór alle subkenmerken in $response, zodat ze in het juiste JSON-object worden gegroepeerd en u twee JSON-objecten hebt die hierboven kunnen worden geparseerd android gedeelde code.
<?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 gegenereerd JSON-antwoord (OPTIE1)
{
"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"
}
]
}
}
De code is een paar dagen beschikbaar op https://codepad.remoteinterview.io/YJJKVUEAAH