简体   繁体   中英

apply condition on json object with in json array java

I am fetching some json from server like this

    "applications": [
        {
          "packageName": "com.facebook.mlite",
          "defaultPermissionPolicy": "PROMPT",
          "delegatedScopes": [
            "DELEGATED_SCOPE_UNSPECIFIED",
            "CERT_INSTALL",
            "MANAGED_CONFIGURATIONS",
            "BLOCK_UNINSTALL",
            "PERMISSION_GRANT",
            "PACKAGE_ACCESS",
            "ENABLE_SYSTEM_APP"
          ],
          "permissionGrants": [
            {
              "permission": "tt",
              "policy": "PROMPT"
            }
          ],
          "disabled": false,
          "minimumVersionCode": 0
        },


 {
      "packageName": "com.facebook.mlite",
      "defaultPermissionPolicy": "PROMPT",
      "delegatedScopes": [
        "DELEGATED_SCOPE_UNSPECIFIED",
        "CERT_INSTALL",
        "MANAGED_CONFIGURATIONS",
        "BLOCK_UNINSTALL",
        "PERMISSION_GRANT",
        "PACKAGE_ACCESS",
        "ENABLE_SYSTEM_APP"
      ],
      "permissionGrants": [
        {
          "permission": "tt",
        }
      ],
     }
      ]

Now there is a json array "application":[] in which there are several json object. Now these object are not same. Some json objects are missing like first object contains installType but second one doesn't. Now i want to add this in a list for a recyclerview if a json object is missing i want to send empty tring in contrustor of my pojo class

   public Application(String defaultPermissionPolicy, List<String> delegatedScopes, List<com.ariaware.enrolldevice.PolicyPojos.PermissionGrants> permissionGrants, Boolean disabled, String installType, Integer minimumVersionCode, String packageName) {
        this.defaultPermissionPolicy = defaultPermissionPolicy;
        this.delegatedScopes = delegatedScopes;
        PermissionGrants = permissionGrants;
        this.disabled = disabled;
        this.installType = installType;
        this.minimumVersionCode = minimumVersionCode;
        this.packageName = packageName;
    }

This is constructor of my class. Now how will i loop through json array and check either if an object exists or not or if doesn't exist then send empty string. I need to check every object

You could implement another constructor which accepts a JSONObject as a parameter and create the object. Inside the constructor use optString which returns an empty string if the field doesn't exist (also accepts another parameter for the fallback value).

public Application(JSONObject jsonObject) {
    this.installType = jsonObject.optString("installType");

    // example of an array
    JSONArray scopes = jsonObject.optJSONArray("delegatedScopes");
    this.delegatedScopes = new ArrayList<>();
    for (int i = 0; i < scopes.length(); i++)
        this.delegatedScopes.add(scopes.optString(i));

    //other initialization...
}

Finally, you retrieve each JSONObject from the applications array.

try {
    JSONArray res = data.optJSONArray("applications");
    Application[] items =  new Application[res.length()];
    for (int i = 0; i < res.length(); i++)
        items[i] = new Application(res.getJSONObject(i));
    } catch (JSONException e) {
        e.printStackTrace();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM