LƯU Ý :như đã đề cập trong câu hỏi trước, chuỗi JSON đã cho cần phải ở định dạng đúng, tức là có khóa cho từng đối tượng (đăng nhập, tài khoản) hoặc có chúng trong một mảng (đầu vào). Tôi đang đưa ra giải pháp cho cả hai tùy chọn.
Người mới làm quen, tôi cung cấp cho bạn 2 phương thức riêng biệt để bạn có thể xử lý chuỗi JSON đến tùy thuộc vào cách bạn xây dựng nó hoặc 2 đối tượng trong Chuỗi JSON đơn hoặc 2 đối tượng trong một mảng JSON.
Bạn có thể chọn giải pháp của mình :)
Hãy thử mã, hãy cho tôi biết nếu bạn cần thêm trợ giúp và chấp nhận câu trả lời.
TÙY CHỌN1:2 Đối tượng trong chuỗi JSON duy nhất
{
"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"
}
]
}
}
TÙY CHỌN2:2 Đối tượng trong chuỗi mảng JSON duy nhất
{
"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"
}
]
}
]
}
Mã để xử lý cả hai trường hợp (OPTION1 và OPTION2) của Chuỗi JSON
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());
}
}
}
}
Nhật ký mẫu cho OPTION1 &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: ---------------------------------
Tôi không có quyền truy cập vào tất cả các tệp PHP nội bộ mà tôi có thể sử dụng để chạy Mã PHP của bạn, vì vậy tôi đã thay thế hầu hết tất cả các lệnh gọi hàm bằng các giá trị được mã hóa cứng như được chia sẻ trong tải phản hồi mẫu. Đây là mã để tạo Đối tượng JSON ở định dạng OPTION1.
Nói tóm lại, bạn phải thêm ["login"] và ["account"] vào trước tất cả các thuộc tính phụ trong $ response để chúng được nhóm vào đúng Đối tượng JSON và bạn sẽ có hai đối tượng JSON có thể được phân tích cú pháp ở trên mã chia sẻ 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 đã tạo phản hồi 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"
}
]
}
}
Mã sẽ có trong vài ngày tới tại https://codepad.remoteinterview.io/YJJKVUEAAH