JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现_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.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("子项数:"+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对象并存储到数据库的实现

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索json复杂数据处理
数据库存储树形结构、数据库存储json数据、json数据存储到数据库、树形结构数据库设计、数据库 树形结构,以便于您获取更多的相关知识。

时间: 2024-09-25 13:36:28

JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现_java的相关文章

WPF:使用Json.NET在TreeView中树形显示JSON数据

原文  WPF:使用Json.NET在TreeView中树形显示JSON数据 据 读者可以参考这个开源的可以树形显示XML和JSON的工具: Mgen Object 603:XML/JSON树形显示小工具 或者一个更大的开源工程(构建和分析HTTP并支持XML及JSON的树形显示): Mgen Bluckbadda   效果如下: (每一个项目中的左侧黑字是数据的值,右侧灰字是数据的类型.对于对象或数组,黑字会显示对象的属性个数或数组的成员个数) (上图中的JSON数据来自:http://www

在WebSphere Cast Iron中使用JSON(三) 设计基于JSON的REST API

简介 WebSphere Cast Iron(后面简称为 Cast Iron)被广泛用于遍及内部和外部应用程序的集成和迁移.过去,JSON  被普遍用作 REST API 的传输类型,因为与 XML 相比,它的格式是轻量级的. 在 Cast Iron 中,您可以创建和公开一个基于 JSON 的 API,这是一个以 JSON 格式接受请求并发送响应的整合流程.Cast Iron 使用了 XML 和XML 模式.Cast Iron 引入了两个用来处理 JSON 数据的新活动:Read JSON 和

在WebSphere Cast Iron中使用JSON(二) 调用基于JSON的REST API

简介 WebSphere Cast Iron(以下简称 Cast Iron)被广泛用于整个内部和外部应用程序的集成和迁移.过去,大多数基于 SaaS 的应用程序都公开了 REST API,这些 API 用于处理 JSON 数据.然而,Cast Iron 主要处理 XML 和 XML 模式.为了支持有效的 REST API 调用,Cast Iron 引入了两个新活动来处理 JSON 数据. 您可以在调用 REST API (大部分是 SaaS 供应商公开的)的过程中使用 Read JSON 和 W

在WebSphere Cast Iron中使用JSON(一)配置Read JSON和Write JSON活动

简介 JavaScript Object Notation (JSON) 是一个基于文本的开放标准,为了进行人类可读的数据交换而设计.JSON 源于 JavaScript  脚本语言,用于表示简单的数据结构和被称为对象 的关联数组.过去,SaaS 应用程序绝大多数为企业客户所用.JSON 被认为是一个用于表示 HTTP 上的数据的有效且高效的方法.早些时候,几乎所有公开 Web 服务(以 SOAP 消息形式传输数据)的 SaaS 应用程序都开始通过 REST API(传输的数据是 JSON/XM

java对象怎么转json数组

1.ListJava代码boolean[] boolArray =newboolean[]{true,false,true};                  JSONArray jsonArray1 = JSONArray.fromObject( boolArray );                  System.out.println( jsonArray1 );                 // prints [true,false,true]                 

实例解析java + jQuery + json工作过程(获取JSON数据)

前天刚刚写的一篇关于<实例解析java + ajax(jQuery) + json工作过程(登录)>的文章引起了网友们的关注和好评, 自从本站的账务管理系统(个人版)开源 以后很多网友询问系统的实现方式,我一一解释--,为此今天写文章详细讲解系统功能的实现细节. 以本站的开源项目账务管理系统的"债务人"模块为例子讲解 一.效果预览 二.实现方式 基本思想就是绑定列表中的人员名称触发事件,获得当前人员的ID发送ajax请求到后台,后台根据ID查询详细信息,返回JSON数据结果

ava json-用java的谷歌库gson解析JSON,如下的json数据,该如何定义java类??

问题描述 用java的谷歌库gson解析JSON,如下的json数据,该如何定义java类?? 求高人指点,用java的谷歌库gson解析JSON,如下的json数据,该如何定义java类?? 在线等............... { "00:00:8e:d7:ba:ac:88:47": { "flow-mod-3": { "version": 1, "type": "FLOW_MOD", "le

json与java对象转换的问题

问题描述 json与java对象转换的问题 请问一下这样的json字符串如何转化为java对象呢? json字符串: "{"post":{"userId":"1","postId":"2"}}" 如果post后面是一个json字符串,那一点问题都没有,但是post后面是一个json对象,这要怎么解析呢?我的javabean是Post.求大神帮忙- 解决方案 Json是标记语言,到任何语言

JSON 介绍(Introducing JSON)

介绍 JSON العربية Български 中文 Český Dansk Nederlands English Esperanto Français Deutsch Ελληνικά עברית Magyar Indonesia Italiano 日本 한국어 فارسی Polski Português Română Русский Српско-хрватски Slovenščina Español Svenska Türkçe Tiếng Việt ECMA-404 The JS