private ArrayNode getRegionsJson(Cluster cluster) {

    Collection<Cluster.Region> clusterRegions = cluster.getClusterRegions().values();
    ArrayNode regionsListJson = mapper.createArrayNode();

    if (!clusterRegions.isEmpty()) {
      for (Cluster.Region region : clusterRegions) {
        ObjectNode regionJSON = mapper.createObjectNode();
        regionJSON.put("name", region.getName());
        regionJSON.put("fullPath", region.getFullPath());
        regionJSON.put("regionType", region.getRegionType());

        regionJSON.put("isPartition", region.getRegionType().contains("PARTITION"));

        regionJSON.put("memberCount", region.getMemberCount());
        List<String> regionsMembers = region.getMemberName();
        ArrayNode jsonRegionMembers = mapper.createArrayNode();

        for (String regionsMember : regionsMembers) {
          Cluster.Member member = cluster.getMembersHMap().get(regionsMember);
          ObjectNode jsonMember = mapper.createObjectNode();
          jsonMember.put("key", regionsMember);
          jsonMember.put("id", member.getId());
          jsonMember.put("name", member.getName());

          jsonRegionMembers.add(jsonMember);
        }

        regionJSON.set("members", jsonRegionMembers);
        regionsListJson.add(regionJSON);
      }
    }
    return regionsListJson;
  }
This method creates json for list of cluster regions

@return ArrayNode JSON array
geode-pulse/src/main/java/org/apache/geode/tools/pulse/internal/controllers/PulseController.java