sql >> データベース >  >> RDS >> SQLite

2つのJson応答Jsonオブジェクトと配列をフェッチする方法

    :前の質問で述べたように、指定されたJSON文字列は正しい形式である必要があります。つまり、各オブジェクト(ログイン、アカウント)のキーを持っているか、単一の配列(入力)にある必要があります。私は両方のオプションの解決策を提供しています。

    初心者、私は2つの別々のメソッドを提供しているので、単一のJSON文字列の2つのオブジェクトまたはJSON配列の2つのオブジェクトのいずれかを構築する方法に応じて、着信JSON文字列を処理できます。

    あなたはあなたの解決策を選ぶことができます:)

    コードを試してみてください。さらにサポートが必要な場合はお知らせください。回答を受け入れてください。

    オプション1:単一のJSON文字列内の2つのオブジェクト

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

    オプション2:単一のJSON配列文字列内の2つのオブジェクト

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

    JSON文字列の両方のシナリオ(OPTION1とOPTION2)を処理するコード

    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());
                }
            }
        }
    }
    

    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: ---------------------------------
    

    PHPコードを実行するために使用できるすべての内部PHPファイルにアクセスできないため、すべての関数呼び出しのほとんどを、サンプル応答ペイロードで共有されるハードコードされた値に置き換えました。これは、OPTION1形式でJSONオブジェクトを生成するためのコードです。

    つまり、$ responseのすべてのサブ属性の前に["login"]と["accounts"]を追加して、正しいJSONオブジェクトにグループ化し、上記で解析できる2つのJSONオブジェクトを作成する必要があります。 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サンプル実行で生成された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"
             }
          ]
       }
    }
    

    コードはhttps://codepad.remoteinterview.io/YJJKVUEAAH

    で数日間利用可能になります

    1. Microsoft SQL Server 2005/2008:XMLとtext/varcharデータ型

    2. 2つの日付列から日付範囲を生成する

    3. SQLDeveloperが起動しない

    4. MySQLデータベースに接続する方法