最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java如何實現嵌套對象轉大map(扁平化)

 更新時間:2022年10月08日 08:57:30   作者:機智W_en  
這篇文章主要介紹了java如何實現嵌套對象轉大map(扁平化),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

嵌套對象轉大map(扁平化)

部分業(yè)務場景在傳輸數據時,需要的數據格式是扁平化的json格式,而在java對象中有時候為了解耦會做一些嵌套(即對象中包含對象,多層也是常有)。

下面的代碼可以提供該能力

  • 處理單個對象:ObjectToMapUtil.nestedObj2Map
  • 處理列表對象:ObjectToMapUtil.nestedObjList2ListMap
package cn.sto.station.twin.common.util;
 
import cn.sto.station.twin.common.util.json.JsonUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * 基于反射,將obj轉為map
 *
 * @date 2022-05-30 10:50
 */
@Slf4j
public class ObjectToMapUtil {
 
    private static final String SEPARATOR = "_";
 
    /**
     * 嵌套對象轉大map(扁平化)
     *
     * @param object 源對象
     * @return map
     */
    public static Map<String, Object> nestedObj2Map(Object object) {
        Map<String, Object> maps = JSON.parseObject(JSON.toJSONString(object), Map.class);
        Map<String, Object> result = new HashMap<>();
        maps.forEach((key, value) -> {
            common(maps, result, key, value, key);
        });
        return result;
    }
 
    /**
     * List嵌套對象轉大list map(扁平化)
     *
     * @param objectList 源List對象
     * @return map
     */
    public static <T> List<Map<String, Object>> nestedObjList2ListMap(List<T> objectList) {
        ArrayList<Map<String, Object>> resultList = new ArrayList<>();
        for (T t : objectList) {
            resultList.add(nestedObj2Map(t));
        }
        return resultList;
    }
 
    public static Map<String, Object> nestedObj2Map(Map<String, Object> maps, String prefix) {
        Map<String, Object> result = new HashMap<>();
        String keyPrefix = prefix + SEPARATOR;
        maps.forEach((key, value) -> {
            String newKey = keyPrefix + key;
            common(maps, result, key, value, newKey);
        });
        return result;
    }
 
    public static void common(Map<String, Object> maps, Map<String, Object> result, String key, Object value, String newKey) {
        if (maps.get(key) != null && value instanceof JSONObject) {
            Map<String, Object> subMaps = (Map) maps.get(key);
            Map<String, Object> map = nestedObj2Map(subMaps, newKey);
            if (map != null && !map.isEmpty()) {
                result.putAll(map);
            }
        } else {
            result.put(newKey, maps.get(key));
        }
    }
 
    
 
}

java:JSON扁平化和去扁平化

在github上發(fā)現了一個比較好的JSON扁平化和去扁平化處理方法,話不多說,直接開干。

1、扁平化數據(網上找的一json大串)

"{\"type\":10,\"data\":[{\"text\":\"獻給愛我們的女神\",\"is_liked\":false,\"index_cover\":\"http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_989_123986672_17737936936133063098.jpg?imageView/2/w/960/q/85\",\"poi\":\"\",\"cover_image_height\":816,\"trip_id\":2387282916,\"index_title\":\"\",\"center_point\":{},\"view_count\":36207,\"location_alias\":\"\",\"cover_image_1600\":\"http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_926_123986672_17737936923172662193.jpg?imageView/2/w/1384/h/1384/q/85\",\"cover_image_s\":\"http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_926_123986672_17737936923172662193.jpg?imageView/1/w/280/h/280/q/75\",\"share_url\":\"btrip/spot/2387842143/\",\"timezone\":\"Asia/Shanghai\",\"date_tour\":\"2016-06-19T01:19:07+08:00\",\"is_hiding_location\":false,\"user\":{\"location_name\":\"\",\"name\":\"丑到沒墻角\",\"resident_city_id\":\"\",\"mobile\":\"\",\"gender\":2,\"avatar_m\":\"http://photos.breadtrip.com/avatar_41_b8_aedfd71640e3ec09d0c30edc47df04dc56dbf38a.jpg-avatar.m\",\"cover\":\"http://photos.breadtrip.com/default_user_cover_10.jpg-usercover.display\",\"custom_url\":\"\",\"experience\":{\"value\":59,\"level_info\":{\"name\":\"\",\"value\":1}},\"id\":2384288641,\"birthday\":\"\",\"country_num\":null,\"avatar_s\":\"http://photos.breadtrip.com/avatar_41_b8_aedfd71640e3ec09d0c30edc47df04dc56dbf38a.jpg-avatar.s\",\"country_code\":null,\"email_verified\":false,\"is_hunter\":false,\"cdc2\":false,\"avatar_l\":\"http://photos.breadtrip.com/avatar_41_b8_aedfd71640e3ec09d0c30edc47df04dc56dbf38a.jpg-avatar.l\",\"email\":\"\",\"user_desc\":\"\",\"points\":2},\"spot_id\":2387842143,\"is_author\":false,\"cover_image_w640\":\"http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_926_123986672_17737936923172662193.jpg?imageView/1/w/640/h/480/q/85\",\"region\":{\"primary\":\"\",\"secondary\":\"\"},\"comments_count\":2,\"cover_image\":\"http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_926_123986672_17737936923172662193.jpg?imageView/2/w/960/q/85\",\"cover_image_width\":1088,\"recommendations_count\":21}],\"desc\":\"\"}"

2、maven依賴

https://github.com/wnameless/json-flattener

?<dependency>
? ? ?<groupId>com.github.wnameless.json</groupId>
? ? ?<artifactId>json-flattener</artifactId>
? ? ?<version>0.8.1</version>
?</dependency>

3、扁平化

? ? /**
? ? ?* json 扁平化
? ? ?*/
? ? public static void jsonFlatten(String jsonStr) {
? ? ? ? JSONObject jsonObj = JSONObject.parseObject(jsonStr);
? ? ? ? Map<String, Object> flatMap = JsonFlattener.flattenAsMap(jsonObj.toString());
? ? ? ? for (Map.Entry<String, Object> entry : flatMap.entrySet()) {
? ? ? ? ? ? System.out.println(entry.getKey() + " : " + entry.getValue());
? ? ? ? }
? ? }

備注:扁平化級別默認.隔開,若指定級別分割任意符號:

?new JsonFlattener(jsonObj.toString()).withSeparator(',').flattenAsMap();

輸出結果:

data[0].center_point: {}
data[0].comments_count: 2
data[0].cover_image: http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_926_123986672_17737936923172662193.jpg?imageView/2/w/960/q/85
data[0].cover_image_1600: http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_926_123986672_17737936923172662193.jpg?imageView/2/w/1384/h/1384/q/85
data[0].cover_image_height: 816
data[0].cover_image_s: http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_926_123986672_17737936923172662193.jpg?imageView/1/w/280/h/280/q/75
data[0].cover_image_w640: http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_926_123986672_17737936923172662193.jpg?imageView/1/w/640/h/480/q/85
data[0].cover_image_width: 1088
data[0].date_tour: 2016-06-19T01:19:07+08:00
data[0].index_cover: http://photos.breadtrip.com/photo_d_2016_06_19_01_21_20_989_123986672_17737936936133063098.jpg?imageView/2/w/960/q/85
data[0].index_title: 
data[0].is_author: false
data[0].is_hiding_location: false
data[0].is_liked: false
data[0].location_alias: 
data[0].poi: 
data[0].recommendations_count: 21
data[0].region.primary: 
data[0].region.secondary: 
data[0].share_url: btrip/spot/2387842143/
data[0].spot_id: 2387842143
data[0].text: 獻給愛我們的女神
data[0].timezone: Asia/Shanghai
data[0].trip_id: 2387282916
data[0].user.avatar_l: http://photos.breadtrip.com/avatar_41_b8_aedfd71640e3ec09d0c30edc47df04dc56dbf38a.jpg-avatar.l
data[0].user.avatar_m: http://photos.breadtrip.com/avatar_41_b8_aedfd71640e3ec09d0c30edc47df04dc56dbf38a.jpg-avatar.m
data[0].user.avatar_s: http://photos.breadtrip.com/avatar_41_b8_aedfd71640e3ec09d0c30edc47df04dc56dbf38a.jpg-avatar.s
data[0].user.birthday: 
data[0].user.cdc2: false
data[0].user.cover: http://photos.breadtrip.com/default_user_cover_10.jpg-usercover.display
data[0].user.custom_url: 
data[0].user.email: 
data[0].user.email_verified: false
data[0].user.experience.level_info.name: 
data[0].user.experience.level_info.value: 1
data[0].user.experience.value: 59
data[0].user.gender: 2
data[0].user.id: 2384288641
data[0].user.is_hunter: false
data[0].user.location_name: 
data[0].user.mobile: 
data[0].user.name: 丑到沒墻角
data[0].user.points: 2
data[0].user.resident_city_id: 
data[0].user.user_desc: 
data[0].view_count: 36207
desc: 
type: 10

4、去扁平化

String unflattenJson = JsonUnflattener.unflatten(flattenJson);

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java超詳細講解設計模式中的命令模式

    Java超詳細講解設計模式中的命令模式

    命令模式是將一個請求封裝為一個對象,從而可用不同的請求對客戶進行參數化,對請求排隊或者對請求做日志記錄,以及可以支持撤銷的操作
    2022-04-04
  • 你的Idea還有BUG嗎不妨試試另一個開發(fā)神器

    你的Idea還有BUG嗎不妨試試另一個開發(fā)神器

    Spring Tool Suite(STS)就是一個基于Eclipse的開發(fā)環(huán)境, 用于開發(fā)Spring應用程序。本文給大家給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-12-12
  • 用3個實例從原理到實戰(zhàn)講清楚Log4j史詩級漏洞

    用3個實例從原理到實戰(zhàn)講清楚Log4j史詩級漏洞

    最近應該很多人都在關注著一個漏洞Apache Log4j 2遠程代碼執(zhí)行,該漏洞一旦被攻擊者利用會造成嚴重危害,這篇文章主要給大家介紹了關于如何用3個實例從原理到實戰(zhàn)講清楚Log4j史詩級漏洞的相關資料,需要的朋友可以參考下
    2021-12-12
  • Java使用延時隊列搞定超時訂單處理的場景

    Java使用延時隊列搞定超時訂單處理的場景

    這篇文章主要介紹了Java使用延時隊列搞定超時訂單處理,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • SpringCloud配置中心Config過程解析

    SpringCloud配置中心Config過程解析

    這篇文章主要介紹了SpringCloud配置中心Config過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java 單向隊列及環(huán)形隊列的實現原理

    Java 單向隊列及環(huán)形隊列的實現原理

    本文主要介紹了Java 單向隊列及環(huán)形隊列的實現原理,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java實現ATM取款機程序

    Java實現ATM取款機程序

    這篇文章主要為大家詳細介紹了Java實現ATM取款機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 如何解決Mybatis-plus中@TableLogic注解失效問題

    如何解決Mybatis-plus中@TableLogic注解失效問題

    這篇文章主要介紹了如何解決Mybatis-plus中@TableLogic注解失效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java編程中避免equals方法的隱藏陷阱介紹

    Java編程中避免equals方法的隱藏陷阱介紹

    這篇文章主要介紹了Java編程中避免equals方法的隱藏陷阱介紹,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 詳解Java枚舉類在生產環(huán)境中的使用方式

    詳解Java枚舉類在生產環(huán)境中的使用方式

    本文主要介紹了Java枚舉類在生產環(huán)境中的使用方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-02-02

最新評論

凤山县| 敦化市| 天祝| 乌恰县| 黎川县| 旬邑县| 永济市| 安仁县| 隆回县| 东兴市| 光山县| 洪江市| 高邮市| 汨罗市| 蒙阴县| 阿拉善盟| 汕头市| 突泉县| 河间市| 台南市| 定州市| 饶阳县| 洛川县| 汶川县| 宁国市| 郧西县| 晋中市| 资源县| 陇南市| 新乡县| 信丰县| 嘉峪关市| 沾益县| 贵港市| 桃园县| 绥阳县| 香港 | 饶河县| 尉犁县| 连云港市| 常德市|