【问题标题】:Break big JSON into separate small JSONs based on a specific key, value pair in JAVA根据 JAVA 中的特定键、值对将大 JSON 分解为单独的小 JSON
【发布时间】:2021-01-16 07:11:30
【问题描述】:

我有一个使用 JSON PATH 从 SQL Server 创建的 JSON,下面是它的外观,这个 JSON 存储在 STRING 类型的变量中。

{
  "users": [
    {
      "displayName": "Dennis Law",
      "givenName": "Dennis",
      "surname": "Law",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "emailAddress",
          "issuerAssignedId": "dennislaw@gmail.com"
        }
      ],
      "extension_timezone": "VET",
      "extension_locale": "en-IN",
      "extension_tenant": "Team1"
    },
    {
      "displayName": "Geroge West",
      "givenName": "Geroge",
      "surname": "West",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "userName",
          "issuerAssignedId": "gwest"
        }
      ],
      "extension_timezone": "PST",
      "extension_locale": "en-GB",
      "extension_tenant": "Team2"
    },
    {
      "displayName": "Shaggy Nate",
      "givenName": "Shaggy",
      "surname": "Nate",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "userName",
          "issuerAssignedId": "Shaggynatealpha"
        }
      ],
      "extension_timezone": "NST",
      "extension_locale": "en-AF",
      "extension_tenant": "Team1"
    }
  ]
}

在下面的 JSON 中,我有一个键 extension_tenant,它就像一个团队,所以我们有 Team1、Team2、Team3...等值

我想知道是否有一种方法可以基于 extension_tenant 破解此 JSON 并将其存储在基于 extension_tenant 的 STRING 中,所以它看起来像这样。

假设所有带有 extension_tenant = Team1 的都将存储在单独的 STRING 中,

示例:

String Team1 = "

{
  "users": [
    {
      "displayName": "Dennis Law",
      "givenName": "Dennis",
      "surname": "Law",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "emailAddress",
          "issuerAssignedId": "dennislaw@gmail.com"
        }
      ],
      "extension_timezone": "VET",
      "extension_locale": "en-IN",
      "extension_tenant": "Team1"
    },
    {
      "displayName": "Shaggy Nate",
      "givenName": "Shaggy",
      "surname": "Nate",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "userName",
          "issuerAssignedId": "Shaggynatealpha"
        }
      ],
      "extension_timezone": "NST",
      "extension_locale": "en-AF",
      "extension_tenant": "Team1"
    }
  ]
} ";

对于所有使用 extension_tenant 作为 Team2 的人

String Team2 = "
{
  "users": [
    {
      "displayName": "Geroge West",
      "givenName": "Geroge",
      "surname": "West",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "userName",
          "issuerAssignedId": "gwest"
        }
      ],
      "extension_timezone": "PST",
      "extension_locale": "en-GB",
      "extension_tenant": "Team2"
    }
  ]
} ";

我希望我能够解释我想要做什么,请提出建议和方法,我在 stackoverflow 上很活跃,所以我可能会立即回复并处理建议。我也在寻找方法来做到这一点。

【问题讨论】:

    标签: java arrays json collections


    【解决方案1】:

    检查以下方法是否适合您

    用户.java

    package json;
    
    import java.util.List;
    
    import com.fasterxml.jackson.annotation.JsonProperty;
    
    public class User {
        @JsonProperty("displayName")
        private String displayName;
    
        @JsonProperty("givenName")
        private String givenName;
    
        @JsonProperty("surname")
        private String surname;
    
        @JsonProperty("extension_user_type")
        private String extension_user_type;
    
        @JsonProperty("identities")
        private List<Identity> identities;
    
        @JsonProperty("extension_timezone")
        private String extension_timezone;
    
        @JsonProperty("extension_locale")
        private String extension_locale;
    
        @JsonProperty("extension_tenant")
        private String extension_tenant;
    
        /**
         * @return the displayName
         */
        public String getDisplayName() {
            return displayName;
        }
    
        /**
         * @param displayName
         *            the displayName to set
         */
        public void setDisplayName(String displayName) {
            this.displayName = displayName;
        }
    
        /**
         * @return the givenName
         */
        public String getGivenName() {
            return givenName;
        }
    
        /**
         * @param givenName
         *            the givenName to set
         */
        public void setGivenName(String givenName) {
            this.givenName = givenName;
        }
    
        /**
         * @return the surname
         */
        public String getSurname() {
            return surname;
        }
    
        /**
         * @param surname
         *            the surname to set
         */
        public void setSurname(String surname) {
            this.surname = surname;
        }
    
        /**
         * @return the extension_user_type
         */
        public String getExtension_user_type() {
            return extension_user_type;
        }
    
        /**
         * @param extension_user_type
         *            the extension_user_type to set
         */
        public void setExtension_user_type(String extension_user_type) {
            this.extension_user_type = extension_user_type;
        }
    
        /**
         * @return the identities
         */
        public List<Identity> getIdentities() {
            return identities;
        }
    
        /**
         * @param identities
         *            the identities to set
         */
        public void setIdentities(List<Identity> identities) {
            this.identities = identities;
        }
    
        /**
         * @return the extension_timezone
         */
        public String getExtension_timezone() {
            return extension_timezone;
        }
    
        /**
         * @param extension_timezone
         *            the extension_timezone to set
         */
        public void setExtension_timezone(String extension_timezone) {
            this.extension_timezone = extension_timezone;
        }
    
        /**
         * @return the extension_locale
         */
        public String getExtension_locale() {
            return extension_locale;
        }
    
        /**
         * @param extension_locale
         *            the extension_locale to set
         */
        public void setExtension_locale(String extension_locale) {
            this.extension_locale = extension_locale;
        }
    
        /**
         * @return the extension_tenant
         */
        public String getExtension_tenant() {
            return extension_tenant;
        }
    
        /**
         * @param extension_tenant
         *            the extension_tenant to set
         */
        public void setExtension_tenant(String extension_tenant) {
            this.extension_tenant = extension_tenant;
        }
    
        public String toString() {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append('{');
            stringBuilder.append("\"displayName\":" + "\"" + displayName + "\",");
            stringBuilder.append("\"givenName\":" + "\"" + givenName + "\",");
            stringBuilder.append("\"surname\":" + "\"" + surname + "\",");
            stringBuilder.append("\"extension_user_type\":" + "\""
                    + extension_user_type + "\",");
    
            if (identities != null && identities.size() > 0) {
                stringBuilder.append("\"identities\": [");
                for (Identity identity : identities) {
                    stringBuilder.append(identity);
                }
                stringBuilder.append("],");
            }
            stringBuilder.append("\"extension_timezone\":" + "\""
                    + extension_timezone + "\",");
            stringBuilder.append("\"extension_locale\":" + "\"" + extension_locale
                    + "\",");
            stringBuilder.append("\"extension_tenant\":" + "\"" + extension_tenant
                    + "\"");
            stringBuilder.append('}');
            return stringBuilder.toString();
        }
    }
    

    身份.java

    package json;
    
    import com.fasterxml.jackson.annotation.JsonProperty;
    
    public class Identity {
        @JsonProperty("signInType")
        private String signInType;
    
        @JsonProperty("issuerAssignedId")
        private String issuerAssignedId;
    
        /**
         * @return the signInType
         */
        public String getSignInType() {
            return signInType;
        }
    
        /**
         * @param signInType
         *            the signInType to set
         */
        public void setSignInType(String signInType) {
            this.signInType = signInType;
        }
    
        /**
         * @return the issuerAssignedId
         */
        public String getIssuerAssignedId() {
            return issuerAssignedId;
        }
    
        /**
         * @param issuerAssignedId
         *            the issuerAssignedId to set
         */
        public void setIssuerAssignedId(String issuerAssignedId) {
            this.issuerAssignedId = issuerAssignedId;
        }
    
        public String toString() {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append('{');
            stringBuilder.append("\"signInType\":" + "\"" + signInType + "\",");
            stringBuilder.append("\"issuerAssignedId\":" + "\"" + issuerAssignedId
                    + "\"");
            stringBuilder.append('}');
            return stringBuilder.toString();
        }
    }
    

    Users.java

    package json;
    
    import java.util.List;
    
    import com.fasterxml.jackson.annotation.JsonProperty;
    
    public class Users {
        @JsonProperty("users")
        List<User> users;
    
        /**
         * @return the users
         */
        public List<User> getUsers() {
            return users;
        }
    
        /**
         * @param users
         *            the users to set
         */
        public void setUsers(List<User> users) {
            this.users = users;
        }
    
        public String toString() {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append('{');
    
            if (users != null && users.size() > 0) {
                stringBuilder.append("\"users\": [");
                for (User user : users) {
                    stringBuilder.append(user);
                }
                stringBuilder.append("]");
            }
            stringBuilder.append('}');
            return stringBuilder.toString();
        }
    }
    

    将 json 存储到 d:/test.json

    在 extension_tenant 属性上进行分组后反序列化。

    转换器.java

    package json;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import com.fasterxml.jackson.core.JsonParseException;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.JsonMappingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class Converter {
        public static void main(String[] args) {
            ObjectMapper mapper = new ObjectMapper();
            InputStream inputStream = null;
            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
                    false);
            Users users = null;
            try {
                inputStream = new FileInputStream("d:/testsep.json");
                //Get Users object
                users = mapper.readValue(inputStream, Users.class);
                StringBuilder stringBuilder = new StringBuilder();
                Map<String, String> groupByTenantmap = null;
                if (users != null) {
                    //retrieve list of User object
                    List<User> userList = users.getUsers();
                    if (userList != null && userList.size() > 0) {
                        groupByTenantmap = new HashMap<String, String>(
                                userList.size());
                        String extension_tenant = null;
                        String value = null;
                        for (User user : userList) {
                            //populate map group by extension_tenant
                            extension_tenant = user.getExtension_tenant();
                            if (groupByTenantmap.containsKey(extension_tenant)) {
                                value = groupByTenantmap.get(extension_tenant);
                                stringBuilder.append(value).append(',')
                                        .append(user.toString());
                                groupByTenantmap.put(extension_tenant,
                                        stringBuilder.toString());
                            } else {
                                groupByTenantmap.put(extension_tenant,
                                        user.toString());
                            }
                            stringBuilder.setLength(0);
                        }
                        
                        //iterate through map and create desired json structure
                        for (Entry<String, String> entry : groupByTenantmap
                                .entrySet()) {
                            stringBuilder.setLength(0);
                            stringBuilder.append("{").append("\"users\":")
                                    .append("[");
                            stringBuilder.append(entry.getValue()).append("]");
                            stringBuilder.append("}");
                            System.out.println("String " + entry.getKey() + "=\""
                                    + stringBuilder.toString() + "\";");
                            System.out.println();
                        }
                    }
                }
            } catch (JsonParseException e) {
                e.printStackTrace();
            } catch (JsonMappingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    输出:

    String Team2="{"users":[{"displayName":"Geroge West","givenName":"Geroge","surname":"West","extension_user_type":"user","identities": [{"signInType":"userName","issuerAssignedId":"gwest"}],"extension_timezone":"PST","extension_locale":"en-GB","extension_tenant":"Team2"}]}";
    
    String Team1="{"users":[{"displayName":"Dennis Law","givenName":"Dennis","surname":"Law","extension_user_type":"user","identities": [{"signInType":"emailAddress","issuerAssignedId":"dennislaw@gmail.com"}],"extension_timezone":"VET","extension_locale":"en-IN","extension_tenant":"Team1"},{"displayName":"Shaggy Nate","givenName":"Shaggy","surname":"Nate","extension_user_type":"user","identities": [{"signInType":"userName","issuerAssignedId":"Shaggynatealpha"}],"extension_timezone":"NST","extension_locale":"en-AF","extension_tenant":"Team1"}]}";
    

    【讨论】:

    • 我会试试你的方法!不过我已经解决了,你的解决方案看起来更有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2022-01-20
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多