mysql存储json数据JAVA_JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现...

在网站开发中经常遇到级联数据的展示,比如选择城市的时候弹出的省市县选择界面。很多前端制作人员习惯于从JSON中而不是从数据库中获取省市县数据。那么在选择了省市县中的某一个城市 ,存储到数据库中需要存储所选城市的代码。所以需要一个能将JSON数据(一般存储在javascript脚本中)结构全部导入到数据库中的功能。

JSON的特点是支持层级结构、支持数组表示的对象 。下面的示例介绍如何将JSON的省市县数据保存到数据库中,实现原理非常简单,就是利用JSON的java工具包API,将层次结构的JSON对象数组通过递归的方式首选转换为Java对象数组,然后保存到数据库中。

实现步骤是:

(一)首先定义一个JsonItem实体类:

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;

}

}

(二)定义一个工具类,在工具类中读取Json数据文件,并进行递归调用 :

public static String importJson(String fullFileName,String jsonType,String encoding,HttpServletRequest request) throws Exception

{

//Json转换为实体类参考: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表示不一样,统一换成sub_id,subname以便与JsonItem的类属性匹配

// 替换后方便统一处理

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转换为array

rootData = "[" + rootData + "]";

try

{

FileUtil.str2file(rootData, "d:/jsonData.txt", "utf-8");//存储到磁盘检查字符串转换是否正确

}

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 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("子项数:"+ent.getItems().length);

dealJson(ent.getItems(),ent.getSub_id(),jsonType,level+1);

}

else

{

//System.out.println("没有子项!");

}

}

}

//此函数

return sReturn ;

}

示例数据(部分):

{

"name": "全国",

"id": "0000000000",

"description": "崇德易城市数据",

"modified": "2012年08月",

"copyright": "http://www.chongdeyi.com/",

"items": [

{

"city": "北京市",

"city_id": "1001000000",

"items": [

{

"sub_city":"东城区",

"sub_id":"2001001000"

},

{

"sub_city":"西城区",

"sub_id":"2001002000"

},

{

"sub_city":"朝阳区",

"sub_id":"2001006000"

},

{

"sub_city":"丰台区",

"sub_id":"2001007000"

},

{

"sub_city":"石景山区",

"sub_id":"2001008000"

},

{

"sub_city":"海淀区",

"sub_id":"2001009000"

},

{

"sub_city":"门头沟区",

"sub_id":"2001010000"

},

{

"sub_city":"房山区",

"sub_id":"2001011000"

},

{

"sub_city":"通州区",

"sub_id":"2001012000"

},

{

"sub_city":"顺义区",

"sub_id":"2001013000"

},

{

"sub_city":"昌平区",

"sub_id":"2001014000"

},

{

"sub_city":"大兴区",

"sub_id":"2001015000"

},

{

"sub_city":"怀柔区",

"sub_id":"2001016000"

},

{

"sub_city":"平谷区",

"sub_id":"2001017000"

},

{

"sub_city":"延庆县",

"sub_id":"2001018000"

},

{

"sub_city":"密云县",

"sub_id":"2001019000"

}]

},{

"city": "天津市",

"city_id": "1002000000",

"items": [

{

"sub_city":"和平区",

"sub_id":"2002001000"

}

以上所述是小编给大家介绍的JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值