欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JSON復(fù)雜數(shù)據(jù)處理之Json樹形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對(duì)象并存儲(chǔ)到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

 更新時(shí)間:2016年03月07日 09:33:19   作者:baozhengw  
這篇文章主要介紹了JSON復(fù)雜數(shù)據(jù)處理之Json樹形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對(duì)象并存儲(chǔ)到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下

 在網(wǎng)站開發(fā)中經(jīng)常遇到級(jí)聯(lián)數(shù)據(jù)的展示,比如選擇城市的時(shí)候彈出的省市縣選擇界面。很多前端制作人員習(xí)慣于從JSON中而不是從數(shù)據(jù)庫(kù)中獲取省市縣數(shù)據(jù)。那么在選擇了省市縣中的某一個(gè)城市 ,存儲(chǔ)到數(shù)據(jù)庫(kù)中需要存儲(chǔ)所選城市的代碼。所以需要一個(gè)能將JSON數(shù)據(jù)(一般存儲(chǔ)在javascript腳本中)結(jié)構(gòu)全部導(dǎo)入到數(shù)據(jù)庫(kù)中的功能。

JSON的特點(diǎn)是支持層級(jí)結(jié)構(gòu)、支持?jǐn)?shù)組表示的對(duì)象 。下面的示例介紹如何將JSON的省市縣數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)原理非常簡(jiǎn)單,就是利用JSON的java工具包API,將層次結(jié)構(gòu)的JSON對(duì)象數(shù)組通過遞歸的方式首選轉(zhuǎn)換為Java對(duì)象數(shù)組,然后保存到數(shù)據(jù)庫(kù)中。

實(shí)現(xiàn)步驟是:

(一)首先定義一個(gè)JsonItem實(shí)體類:

package org.openjweb.core.entity;
public class JsonItem 
{
private String sub_id;
private String sub_name;
private JsonItem[] items;
public JsonItem[] getItems() {
return items;
}
public void setItems(JsonItem[] items) {
this.items = items;
}
public String getSub_id() {
return sub_id;
}
public void setSub_id(String sub_id) {
this.sub_id = sub_id;
}
public String getSub_name() {
return sub_name;
}
public void setSub_name(String sub_name) {
this.sub_name = sub_name;
}
}

(二)定義一個(gè)工具類,在工具類中讀取Json數(shù)據(jù)文件,并進(jìn)行遞歸調(diào)用 :

public static String importJson(String fullFileName,String jsonType,String encoding,HttpServletRequest request) throws Exception
{
//Json轉(zhuǎn)換為實(shí)體類參考:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html
String sReturn = "";
String jsonData = "";
try
{
jsonData = FileUtil.getTextFileContent(fullFileName, encoding);
}
catch(Exception ex)
{
sReturn ="讀Json文件失敗!";
}
//獲取rootId
//logger.info("");
jsonData = jsonData.replace("\"items\":\"\"", ""); //去掉空的 items
String parentId = jsonData.substring(jsonData.indexOf("\"id\":")+5);
parentId = parentId.substring(0,parentId.indexOf(",")).trim();
parentId = parentId.replace("\"", "");
logger.info("root id=="+parentId);
String parentName = jsonData.substring(jsonData.indexOf("\"name\":")+7);
parentName = parentName.substring(0,parentName.indexOf(",")).trim();
parentName = parentName.replace("\"", "");
logger.info("root Name=="+parentName);
String rootData = jsonData.substring(jsonData.indexOf("\"items\":")+8,jsonData.lastIndexOf("}"));
rootData = jsonData.substring(jsonData.indexOf("[")+1,jsonData.lastIndexOf("]"));
//不同json的id,name表示不一樣,統(tǒng)一換成sub_id,subname以便與JsonItem的類屬性匹配
// 替換后方便統(tǒng)一處理
rootData = rootData.replace("city_id", "sub_id");
rootData = rootData.replace("sub_city", "sub_name");
rootData = rootData.replace("city", "sub_name");
rootData = rootData.replace("sub_txt", "sub_name");
rootData = rootData.replace("sub_industry", "sub_name");
rootData = rootData.replace("industry_id", "sub_id");
rootData = rootData.replace("industry", "sub_name");
rootData = rootData.replace("sub_profession", "sub_name");
rootData = rootData.replace("profession_id", "sub_id");
rootData = rootData.replace("profession", "sub_name");
//將rootData轉(zhuǎn)換為array 
rootData = "[" + rootData + "]";
try
{
FileUtil.str2file(rootData, "d:/jsonData.txt", "utf-8");//存儲(chǔ)到磁盤檢查字符串轉(zhuǎn)換是否正確
}
catch(Exception ex)
{
}
JSONArray jsonArray = JSONArray.fromObject(rootData);
Object[] os = jsonArray.toArray();
JsonItem[] items = (JsonItem[]) JSONArray.toArray(jsonArray, JsonItem.class);
saveJsonEnt(jsonType,parentId,parentName,"-1",new Long(1));
dealJson(items,parentId,jsonType,new Long(1));
return sReturn ;
}
private static void saveJsonEnt (String jsonType,String jsonId,String jsonName,String parentId,Long levelId) throws Exception 
{
logger.info(jsonType+"/"+jsonId+"/"+jsonName+"/"+parentId+"/"+String.valueOf(levelId));
CommJsonData ent = new CommJsonData();
ent.setJsonType(jsonType);
ent.setJsonCode(jsonId);
ent.setJsonName(jsonName);
ent.setRowId(StringUtil.getUUID());
ent.setParentCode(parentId);
ent.setLevelId(levelId);
IDBSupportService service = (IDBSupportService)ServiceLocator.getBean("IDBSupportService3");
service.saveOrUpdate(ent);
}
private static String dealJson(JsonItem[] jsonItem,String parentId,String jsonType,Long level)
{
String sReturn = "";
if(jsonItem!=null&&jsonItem.length>0)
{
for(int i=0;i<jsonItem.length;i++)
{
JsonItem ent = jsonItem[i];
//System.out.println(ent.getSub_id());
//System.out.println(ent.getSub_name());
try
{
saveJsonEnt(jsonType,ent.getSub_id(),ent.getSub_name(),parentId,level+1);
}
catch(Exception ex)
{
ex.printStackTrace();
}
if(ent.getItems()!=null)
{
//System.out.println("子項(xiàng)數(shù):"+ent.getItems().length);
dealJson(ent.getItems(),ent.getSub_id(),jsonType,level+1);
}
else
{
//System.out.println("沒有子項(xiàng)!");
}
}
}
//此函數(shù) 
return sReturn ;
} 

示例數(shù)據(jù)(部分):

{
"name": "全國(guó)",
"id": "0000000000",
"description": "崇德易城市數(shù)據(jù)",
"modified": "2012年08月",
"copyright": "http://www.chongdeyi.com/",
"items": [
{
"city": "北京市",
"city_id": "1001000000",
"items": [
{
"sub_city":"東城區(qū)",
"sub_id":"2001001000"
},
{
"sub_city":"西城區(qū)",
"sub_id":"2001002000"
},
{
"sub_city":"朝陽區(qū)",
"sub_id":"2001006000"
},
{
"sub_city":"豐臺(tái)區(qū)",
"sub_id":"2001007000"
},
{
"sub_city":"石景山區(qū)",
"sub_id":"2001008000"
},
{
"sub_city":"海淀區(qū)",
"sub_id":"2001009000"
},
{
"sub_city":"門頭溝區(qū)",
"sub_id":"2001010000"
},
{
"sub_city":"房山區(qū)",
"sub_id":"2001011000"
},
{
"sub_city":"通州區(qū)",
"sub_id":"2001012000"
},
{
"sub_city":"順義區(qū)",
"sub_id":"2001013000"
},
{
"sub_city":"昌平區(qū)",
"sub_id":"2001014000"
},
{
"sub_city":"大興區(qū)",
"sub_id":"2001015000"
},
{
"sub_city":"懷柔區(qū)",
"sub_id":"2001016000"
},
{
"sub_city":"平谷區(qū)",
"sub_id":"2001017000"
},
{
"sub_city":"延慶縣",
"sub_id":"2001018000"
},
{
"sub_city":"密云縣",
"sub_id":"2001019000"
}]
},{
"city": "天津市",
"city_id": "1002000000",
"items": [
{
"sub_city":"和平區(qū)",
"sub_id":"2002001000"
}

以上所述是小編給大家介紹的JSON復(fù)雜數(shù)據(jù)處理之Json樹形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對(duì)象并存儲(chǔ)到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

相關(guān)文章

  • JVM:早期(編譯期)優(yōu)化的深入理解

    JVM:早期(編譯期)優(yōu)化的深入理解

    今天小編就為大家分享一篇關(guān)于JVM:早期(編譯期)優(yōu)化的深入理解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 微信支付java版本之獲取Access_token

    微信支付java版本之獲取Access_token

    這篇文章主要介紹了微信支付java版本之獲取Access_token,java如何獲取Access_token,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java源碼解析ThreadLocal及使用場(chǎng)景

    Java源碼解析ThreadLocal及使用場(chǎng)景

    今天小編就為大家分享一篇關(guān)于Java源碼解析ThreadLocal及使用場(chǎng)景,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • JAVA中調(diào)用C語言函數(shù)的實(shí)現(xiàn)方式

    JAVA中調(diào)用C語言函數(shù)的實(shí)現(xiàn)方式

    這篇文章主要介紹了JAVA中調(diào)用C語言函數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java中使用Jedis操作Redis的示例代碼

    Java中使用Jedis操作Redis的示例代碼

    本篇文章主要介紹了Java中使用Jedis操作Redis的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • Java使用開源Rxtx實(shí)現(xiàn)串口通訊

    Java使用開源Rxtx實(shí)現(xiàn)串口通訊

    這篇文章主要為大家詳細(xì)介紹了Java使用開源Rxtx實(shí)現(xiàn)串口通訊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • java實(shí)現(xiàn)秒表功能

    java實(shí)現(xiàn)秒表功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)秒表功能,利用javax.swing.Timer類設(shè)計(jì)實(shí)現(xiàn)秒表應(yīng)用程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • SpringBoot配置使用H2數(shù)據(jù)庫(kù)的簡(jiǎn)單教程

    SpringBoot配置使用H2數(shù)據(jù)庫(kù)的簡(jiǎn)單教程

    H2是一個(gè)Java編寫的關(guān)系型數(shù)據(jù)庫(kù),它可以被嵌入Java應(yīng)用程序中使用,或者作為一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行。本文將介紹SpringBoot如何配置使用H2數(shù)據(jù)庫(kù)
    2021-05-05
  • 解決java連接虛擬機(jī)Hbase無反應(yīng)的問題

    解決java連接虛擬機(jī)Hbase無反應(yīng)的問題

    這篇文章主要介紹了解決java連接虛擬機(jī)Hbase無反應(yīng)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java實(shí)現(xiàn)圖片上傳到服務(wù)器并把上傳的圖片讀取出來

    Java實(shí)現(xiàn)圖片上傳到服務(wù)器并把上傳的圖片讀取出來

    在各大網(wǎng)站上都可以實(shí)現(xiàn)上傳頭像功能,可以選擇自己喜歡的圖片做頭像,從本地上傳,今天小編給大家分享Java實(shí)現(xiàn)圖片上傳到服務(wù)器并把上傳的圖片讀取出來,需要的朋友參考下
    2017-02-02

最新評(píng)論