java 如何在JSON中包含两个属性

w41d8nur  于 2024-01-05  发布在  Java
关注(0)|答案(1)|浏览(185)

目前,我正在使用Postman开发一个JSON API,我已经能够成功地检索属性,特别是“user”属性。

  1. {
  2. "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  3. "Operations": [
  4. {
  5. "op": "replace",
  6. "value": {
  7. "roles": [
  8. {
  9. "value": "user"
  10. }
  11. ]
  12. }
  13. }
  14. ]
  15. }

字符串
然而,我现在面临的问题是只能从JSON中调用一个属性,我打算检索两个属性。系统只允许我调用第一个属性,即“user”。

  1. {
  2. "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  3. "Operations": [
  4. {
  5. "op": "replace",
  6. "value": {
  7. "roles": [
  8. {
  9. "value": "user"
  10. },
  11. {
  12. "value": "admin"
  13. }
  14. ]
  15. }
  16. }
  17. ]
  18. }


下面是从JSON API获取值的部分代码:

  1. if (operations.getJSONObject(i).getJSONObject("value").has("roles")
  2. && operations.getJSONObject(i).getJSONObject("value")
  3. .getJSONArray("roles").getJSONObject(0).has("value")) {
  4. if (!(operations.getJSONObject(i).getJSONObject("value")
  5. .getJSONArray("roles").getJSONObject(0).getString("value")
  6. .trim().equals("")
  7. || operations.getJSONObject(i).getJSONObject("value")
  8. .getJSONArray("roles").getJSONObject(0)
  9. .getString("value").trim() == null)
  10. && operations.getJSONObject(i).getJSONObject("value")
  11. .getJSONArray("roles").length() > 0) {
  12. Value[] userInfo = new Value[1];
  13. Value value = new Value(
  14. operations.getJSONObject(i).getJSONObject("value")
  15. .getJSONArray("roles").getJSONObject(0)
  16. .getString("value").trim(),
  17. operations.getJSONObject(i).getJSONObject("value")
  18. .getJSONArray("roles").getJSONObject(0)
  19. .getString("value").trim());
  20. userInfo[0] = value;
  21. Operations operation = new Operations(
  22. operations.getJSONObject(i).getString("op").trim(),
  23. "operations.value.roles.value", userInfo);
  24. operationsObjArr[i] = operation;
  25. } else {
  26. proceed = false;
  27. break;
  28. }
  29. }


如何克服这个限制并成功地检索这两个属性?

oaxa6hgo

oaxa6hgo1#

您的代码当前仅读取roles数组中的第一个元素(getJSONObject(0)),以检索需要遍历整个roles数组的多个属性。下面是修改后的代码片段,它将遍历roles数组并将每个role添加到userInfo数组。

  1. if (operations.getJSONObject(i).getJSONObject("value").has("roles")) {
  2. JSONArray rolesArray = operations.getJSONObject(i).getJSONObject("value").getJSONArray("roles");
  3. List<Value> userInfoList = new ArrayList<>();
  4. for (int j = 0; j < rolesArray.length(); j++) {
  5. JSONObject role = rolesArray.getJSONObject(j);
  6. if (role.has("value") && !role.getString("value").trim().equals("")) {
  7. Value value = new Value(
  8. role.getString("value").trim(),
  9. role.getString("value").trim()
  10. );
  11. userInfoList.add(value);
  12. }
  13. }
  14. if (!userInfoList.isEmpty()) {
  15. Value[] userInfo = userInfoList.toArray(new Value[0]);
  16. Operations operation = new Operations(
  17. operations.getJSONObject(i).getString("op").trim(),
  18. "operations.value.roles.value",
  19. userInfo
  20. );
  21. operationsObjArr[i] = operation;
  22. } else {
  23. proceed = false;
  24. break;
  25. }
  26. }

字符串

展开查看全部

相关问题