国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

遞歸解析Json,實現(xiàn)生成可視化Tree+快速獲取JsonPath

這篇具有很好參考價值的文章主要介紹了遞歸解析Json,實現(xiàn)生成可視化Tree+快速獲取JsonPath。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

內(nèi)部平臺的一個小功能點的實現(xiàn)過程,分享給大家:

遞歸解析Json,可以實現(xiàn)生成可視化Tree+快速獲取JsonPath。

步驟:

1.利用JsonPath讀取根,獲取JsonObject

2.遞歸層次遍歷JsonObjec,保存結(jié)點信息

3.利用zTree展示結(jié)點為可視化樹,點擊對應(yīng)樹的結(jié)點即可獲取對應(yīng)結(jié)點的JsonPath

1.利用JsonPath讀取根,獲取JsonObject

示例Json:

{
  "errorMessage": null,
  "errorCode": null,
  "dates": {
    "tradeAmt": null,
    "riskLevel": "LEVEL30",
    "optSelected": {
      "77": [
        {
          "optionContent": "20-50萬元",
          "productCode": null,
          "created": null,
          "optionOrder": null,
          "modified": null,
          "id": 361,
          "optionScore": 8,
          "isInvalid": 1
        }
      ],
      "78": [
        {
          "optionContent": "資產(chǎn)50-500萬元,無債務(wù)或債務(wù)較輕",
          "productCode": null,
          "created": null,
          "optionOrder": null,
          "modified": null,
          "id": 365,
          "optionScore": 6,
          "isInvalid": 1
        }
      ]
    },
    "riskInfoResult": {
      "optLetter": "A",
      "mqOrder": "1",
      "residenceCountryCode": null,
      "taxReason": null,
      "residenceCountryName": null,
      "residenceCountryNameEn": null,
      "countryNameEn": null,
      "taxInfoCode": null,
      "taxInfoIsCompleted": true,
      "taxInfoIsRight": true,
      "countryCode": null,
      "taxId": null,
      "countryName": null,
      "taxReasonInt": null
    },
    "created": 1565654328000,
    "questions": [
      {
        "questionContent": "您的職業(yè)?",
        "productCode": null,
        "created": 1498630051000,
        "options": null,
        "questionSource": "BUSINESS",
        "modified": 1498630051000,
        "id": 75,
        "isInvalid": 1,
        "questionType": 1,
        "order": 1
      },
      {
        "questionContent": "您的主要收入來源是?",
        "productCode": null,
        "created": 1498630051000,
        "options": null,
        "questionSource": "BUSINESS",
        "modified": 1498630051000,
        "id": 76,
        "isInvalid": 1,
        "questionType": 1,
        "order": 2
      }
    ],
    "serialCode": "123",
    "isInvalid": 1,
    "expireTime": 1628783999000,
    "productCode": null,
    "modified": 1565654328000,
    "examScore": 56,
    "id": 4564568,
    "results": {
      "77": "361",
      "78": "365"
    },
    "account": "test"
  },
  "status": "SUCCESS"
}


Java代碼:

String jsonStr = "";
Object rootJson = JsonPath.read(jsonStr, "$");


2.遞歸層次遍歷JsonObjec,保存結(jié)點信息

Java代碼

ZTreeNode zTreeNode = new ZTreeNode();
zTreeNode.setId("$");
zTreeNode.setpId("root");
zTreeNode.setName("root");
zTreeNode.setDepth(0);
zTreeNode.setPath("$");
traverseTree(rootJson, zTreeNode, zTreeNodes);


    public static void traverseTree(Object rootJson, ZTreeNode zTreeNode, List<ZTreeNode> zTreeNodes) {
        if (rootJson instanceof Map) {
            for (Map.Entry<String, Object> stringObjectEntry : ((Map<String, Object>) rootJson).entrySet()) {
                ZTreeNode zTreeNodeTemp = new ZTreeNode();
                zTreeNodeTemp.setDepth(zTreeNode.getDepth() + 1);
                zTreeNodeTemp.setPath(zTreeNode.getPath() + "." + stringObjectEntry.getKey());
                zTreeNodeTemp.setId(zTreeNodeTemp.getPath());
                zTreeNodeTemp.setName(stringObjectEntry.getKey());
                zTreeNodeTemp.setpId(zTreeNode.getPath());
                zTreeNodes.add(zTreeNodeTemp);
                traverseTree(stringObjectEntry.getValue(), zTreeNodeTemp, zTreeNodes);
            }
        } else if (rootJson instanceof List) {
            List json = (List) rootJson;
            for (int i = 0; i < json.size(); i++) {
                Object obj = json.get(i);
                ZTreeNode zTreeNodeTemp = new ZTreeNode();
                zTreeNodeTemp.setDepth(zTreeNode.getDepth() + 1);
                zTreeNodeTemp.setPath(zTreeNode.getPath() + "[" + i + "]");
                zTreeNodeTemp.setId(zTreeNodeTemp.getPath());
                zTreeNodeTemp.setName(zTreeNode.getName() + "[" + i + "]");
                zTreeNodeTemp.setpId(zTreeNode.getPath());
                zTreeNodes.add(zTreeNodeTemp);
                traverseTree(obj, zTreeNodeTemp, zTreeNodes);
            }
        } else {
            // do nothing
        }
    }


3.利用zTree展示結(jié)點為可視化樹,點擊對應(yīng)樹的結(jié)點即可獲取對應(yīng)結(jié)點的JsonPath

前端代碼:

let zTreeObj;
// zTree 的參數(shù)配置
let setting = {
    data: {
        simpleData: {
            enable: true
        }
    },
    callback: {
        onClick: zTreeOnClick
    }
};
zTreeObj = $.fn.zTree.init($("#using_json"), setting, zNodes);
zTreeObj.expandAll(true);


4.擴(kuò)展:將結(jié)點信息反向解析

遞歸解析zNodes+利用nestable插件可視化展示,效果如下:

前端代碼:

        let detailResult = JSON.parse(zNodes);
        let nestableContent = $('<ol class="dd-list"></ol>');
        let dataId = 0;
    // 遍歷解析Json
    function parseJson(jsonObj, nestableContent, dataId) {
        for (let key in jsonObj) {

            let element = jsonObj[key];
            if (element === null) {
                element = "null";
            }
            if (element.length > 0 && typeof (element) == "object" || typeof (element) == "object") {
                
                var li = $('<li class="dd-item" data-id="' + dataId + '"></li>');
                $(li).append('                   <div class="dd-handle">' +
                    '                       <span class="bg-muted p-xs b-r-sm">' + key + '</span>' +
                    '                   </div>').append('<ol class="dd-list"></ol>').appendTo(nestableContent);
                parseJson(element, $(li).children().eq(1), dataId);
            } else {
                dataId++;
                $('<li class="dd-item" data-id="' + dataId + '"></li>').append('                   <div class="dd-handle">' +
                    '                       <span class="bg-muted p-xs b-r-sm">' + key + '</span>' + element +
                    '                   </div>').appendTo(nestableContent);
            }

        }
    }

作者:京東科技 周波

來源:京東云開發(fā)者社區(qū) 轉(zhuǎn)載請注明來源文章來源地址http://www.zghlxwxcb.cn/news/detail-711819.html

到了這里,關(guān)于遞歸解析Json,實現(xiàn)生成可視化Tree+快速獲取JsonPath的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 開源數(shù)據(jù)可視化應(yīng)用程序JSON Crack

    開源數(shù)據(jù)可視化應(yīng)用程序JSON Crack

    什么是 JSON Crack ? JSON Crack 是一款免費的開源數(shù)據(jù)可視化應(yīng)用程序,能夠?qū)?JSON 、 YAML 、 XML 、 CSV 等數(shù)據(jù)格式可視化為交互式圖表。憑借其直觀且用戶友好的界面, JSON Crack 可以輕松探索、分析和理解即使是最復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。無論您是從事大型項目的開發(fā)人員,還是希望發(fā)

    2024年02月21日
    瀏覽(19)
  • Python可視化學(xué)習(xí)——使用JSON進(jìn)行數(shù)據(jù)轉(zhuǎn)換、pyecharts模塊調(diào)用以及可視化案例的介紹(可視化案例數(shù)據(jù)暫無),柱狀圖及動態(tài)柱狀圖的構(gòu)建

    Python可視化學(xué)習(xí)——使用JSON進(jìn)行數(shù)據(jù)轉(zhuǎn)換、pyecharts模塊調(diào)用以及可視化案例的介紹(可視化案例數(shù)據(jù)暫無),柱狀圖及動態(tài)柱狀圖的構(gòu)建

    可視化效果一:2020年印美日新冠累計確診人數(shù) 2020年是新冠疫情爆發(fā)的一年,隨著疫情的爆發(fā),國內(nèi)外確診人數(shù)成了大家關(guān)心的熱點,相信大家都有看過類似的疫情報告.本案例對印度美國日本三個國家確診人數(shù)的進(jìn)行了可視化處理,形成了可視化的疫情確診人數(shù)報告. ?可視

    2024年02月01日
    瀏覽(97)
  • postman生成可視化報告

    postman生成可視化報告

    下載nodejs安裝包,下載地址Node.js (nodejs.org) 打開dos命令行,輸入node -v ,顯示版本號安裝成功(以下操作均在node安裝目錄下打開) 輸入npm -v查看npm是否正常,顯示版本號安裝成功 安裝newman,輸入npm install -g newman,輸入newman -v 顯示版本號安裝成功 安裝newman-reporter-html,安裝方

    2024年02月04日
    瀏覽(21)
  • 使用JSON進(jìn)行數(shù)據(jù)可視化:在報表和圖形展示中的應(yīng)用

    使用JSON進(jìn)行數(shù)據(jù)可視化是一種常見的做法,特別是在數(shù)據(jù)驅(qū)動的網(wǎng)站和應(yīng)用中。JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它易于閱讀和寫入,同時也易于機器解析和生成。以下是如何在報表和圖形展示中使用JSON的一些方法: 報表 : 數(shù)據(jù)準(zhǔn)備 : 首先,你需要

    2024年02月03日
    瀏覽(21)
  • KITTI數(shù)據(jù)集解析和可視化

    KITTI數(shù)據(jù)集解析和可視化

    文章鏈接 《Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite (2012)》 概述 KITTI數(shù)據(jù)集是目前國際上最大的 自動駕駛場景下的計算機視覺算法評測數(shù)據(jù)集 。該數(shù)據(jù)集用于評測立體圖像(stereo),光流(optical flow),視覺測距(visual odometry),3D物體檢測(object detection)和3D跟蹤(track

    2024年02月01日
    瀏覽(17)
  • Apache Echarts(智能生成圖表)-數(shù)據(jù)可視化

    Apache Echarts(智能生成圖表)-數(shù)據(jù)可視化

    Apache ECharts?是一款基于Javascript的數(shù)據(jù)可視化圖表庫,提供直觀生動可交互,可個行化定制的數(shù)據(jù)可視化圖表 Apache ECharts是一個基于JavaScript的開源可視化庫,用于創(chuàng)建交互式的、可定制的圖表和數(shù)據(jù)可視化。它是由百度前端開發(fā)團(tuán)隊開發(fā)和維護(hù)的,于2013年首次發(fā)布,現(xiàn)在已成

    2024年04月11日
    瀏覽(43)
  • Jmeter生成可視化的HTML測試報告

    Jmeter生成可視化的HTML測試報告

    Jmeter也是可以生成測試報告的。 性能測試工具Jmeter由于其體積小、使用方便、學(xué)習(xí)成本低等原因,在現(xiàn)在的性能測試過程中,使用率越來越高,但其本身也有一定的缺點,比如提供的測試結(jié)果可視化做的很一般。 不過從3.0版本開始,jmeter引入了Dashboard Report模塊,用于生成

    2024年02月12日
    瀏覽(21)
  • 解析數(shù)據(jù)可視化工具:如何選擇最合適的軟件

    解析數(shù)據(jù)可視化工具:如何選擇最合適的軟件

    在當(dāng)今信息爆炸的時代,數(shù)據(jù)已成為各行各業(yè)的重要資源。為了更好地理解和分析數(shù)據(jù),數(shù)據(jù)可視化成為一種必不可少的工具。市面上數(shù)據(jù)可視化工具不說上千也有上百,什么帆軟、powerbi、把阿里datav,騰訊云圖、山海鯨可視化等等等等,讓我們選的抓狂。 ? 對于新手小白來

    2024年02月15日
    瀏覽(24)
  • 數(shù)據(jù)可視化python,繪制餅圖,代碼和解析

    數(shù)據(jù)可視化python,繪制餅圖,代碼和解析

    使用matplotlib.pyplot.pie繪制 (1),該函數(shù)的定義如下: matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None) 參數(shù)說明:

    2024年02月06日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包