java 对象与json互转
有时为了项目需求,会将对象数据转换成json数据,以下是个人根据项目需求实现的方法。
项目中需要将数据格式:
[{
"node": "0",
"index": null,
"status": null,
"preNode": null,
"postNode": [{
"node": "xxx_4"
},
{
"node": "xxx_3"
},
{
"node": "xxx_2"
},
{
"node": "xxx_14"
}]
},
{
"node": "xxx_2",
"index": "index_1",
"status": "表达式1",
"preNode": [{
"node": "xxx_0"
}],
"postNode": [{
"node": "xxx_5"
}]
},
{
"node": "xxx_14",
"index": "index_4",
"status": "表达式5",
"preNode": [{
"node": "xxx_0"
}],
"postNode": [{
"node": "xxx_13"
},
{
"node": "xxx_5"
}]
},
{
"node": "xxx_3",
"index": "index_2",
"status": "表达式2",
"preNode": [{
"node": "xxx_0"
}],
"postNode": [{
"node": "xxx_5"
}]
},
{
"node": "xxx_4",
"index": "index_3",
"status": "表达式3",
"preNode": [{
"node": "xxx_0"
}],
"postNode": [{
"node": "xxx_12"
}]
},
{
"node": "xxx_5",
"index": "index_4",
"status": "表达式4",
"preNode": [{
"node": "xxx_3"
},
{
"node": "xxx_2"
},
{
"node": "xxx_14"
}],
"postNode": [{
"node": "xxx_6"
}]
},
{
"node": "xxx_6",
"index": "index_5",
"status": "表达式6",
"preNode": [{
"node": "xxx_5"
}],
"postNode": [{
"node": "xxx_7"
}]
},
{
"node": "xxx_7",
"index": "index_6",
"status": "表达式7",
"preNode": [{
"node": "xxx_6"
}],
"postNode": [{
"node": "xxx_8"
}]
},
{
"node": "xxx_8",
"index": "index_4",
"status": "表达式8",
"preNode": [{
"node": "xxx_7"
}],
"postNode": [{
"node": "xxx_9"
},
{
"node": "xxx_10"
}]
},
{
"node": "xxx_9",
"index": "index_5",
"status": "表达式5",
"preNode": [{
"node": "xxx_8"
}],
"postNode": [{
"node": "xxx_11"
}]
},
{
"node": "xxx_10",
"index": "index_7",
"status": "表达式6",
"preNode": [{
"node": "xxx_8"
}],
"postNode": [{
"node": "xxx_11"
}]
},
{
"node": "xxx_11",
"index": "index_8",
"status": "表达式7",
"preNode": [{
"node": "xxx_9"
},
{
"node": "xxx_10"
}],
"postNode": [{
"node": "xxx_12"
}]
},
{
"node": "xxx_12",
"index": "index_8",
"status": "表达式7",
"preNode": [{
"node": "xxx_11"
},
{
"node": "xxx_4"
}],
"postNode": [{
"node": "xxx_13"
}]
},
{
"node": "xxx_13",
"index": "",
"status": "",
"preNode": [{
"node": "xxx_14"
},
{
"node": "xxx_12"
}],
"postNode": []
},
{
"node": "9999",
"index": null,
"status": null,
"preNode": [{
"node": "xxx_14"
},
{
"node": "xxx_12"
}],
"postNode": null
}]
项目中list对象内容
JsonModel{node='xxx_2', preNode='', index='index_1', status='表达式1'}
JsonModel{node='xxx_14', preNode='', index='index_4', status='表达式5'}
JsonModel{node='xxx_3', preNode='', index='index_2', status='表达式2'}
JsonModel{node='xxx_4', preNode='', index='index_3', status='表达式3'}
JsonModel{node='xxx_5', preNode='xxx_2', index='index_4', status='表达式4'}
JsonModel{node='xxx_5', preNode='xxx_3', index='index_4', status='表达式5'}
JsonModel{node='xxx_5', preNode='xxx_14', index='index_4', status='表达式5'}
JsonModel{node='xxx_6', preNode='xxx_5', index='index_5', status='表达式6'}
JsonModel{node='xxx_7', preNode='xxx_6', index='index_6', status='表达式7'}
JsonModel{node='xxx_8', preNode='xxx_7', index='index_4', status='表达式8'}
JsonModel{node='xxx_9', preNode='xxx_8', index='index_5', status='表达式5'}
JsonModel{node='xxx_10', preNode='xxx_8', index='index_7', status='表达式6'}
JsonModel{node='xxx_11', preNode='xxx_10', index='index_8', status='表达式7'}
JsonModel{node='xxx_11', preNode='xxx_9', index='index_8', status='表达式8'}
JsonModel{node='xxx_12', preNode='xxx_11', index='index_8', status='表达式7'}
JsonModel{node='xxx_12', preNode='xxx_4', index='index_8', status='表达式8'}
JsonModel{node='xxx_13', preNode='xxx_14', index='', status='表达式13'}
JsonModel{node='xxx_13', preNode='xxx_12', index='', status='表达式14'}
public void testJson() throws Exception{
List<JsonModel> list=new ArrayList<>();
ObjectMapper objectMapper=new ObjectMapper();
JsonModel jsonModel=new JsonModel("xxx_2","","index_1","表达式1");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_14","","index_4","表达式5");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_3","","index_2","表达式2");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_4","","index_3","表达式3");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_5","xxx_2","index_4","表达式4");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_5","xxx_3","index_4","表达式5");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_5","xxx_14","index_4","表达式5");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_6","xxx_5","index_5","表达式6");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_7","xxx_6","index_6","表达式7");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_8","xxx_7","index_4","表达式8");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_9","xxx_8","index_5","表达式5");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_10","xxx_8","index_7","表达式6");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_11","xxx_10","index_8","表达式7");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_11","xxx_9","index_8","表达式8");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_12","xxx_11","index_8","表达式7");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_12","xxx_4","index_8","表达式8");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_13","xxx_14","","表达式13");
list.add(jsonModel);
jsonModel=new JsonModel("xxx_13","xxx_12","","表达式14");
list.add(jsonModel);
list.forEach(var->
System.out.println(var.toString())
);
System.out.println();
//将list转成String
String str=objectMapper.writeValueAsString(list);
//将字符串转成JsonNode
JsonNode rootNode = objectMapper.readTree(str);
Set<ChildNode> preNode_set=null;
Set<ChildNode> postNode_set=null;
List<Node> nodeList=new ArrayList<>();
//寻找第一个indxe 创建一个start节点
Node node=new Node();
node.setNode("0");
Set<ChildNode> childNodeList=new HashSet<>();
for(int i=0;i<rootNode.size();i++){
if("".equals(rootNode.get(i).get("preNode").asText())){
childNodeList.add(new ChildNode(rootNode.get(i).get("node").asText()));
}
}
node.setPostNode(childNodeList);
nodeList.add(node);
//这种方式在如果我们只需要一个长json串中某个字段值时非常方便
for (int i=0;i<rootNode.size();){
preNode_set=new HashSet<>();
postNode_set=new HashSet<>();
//直接从rootNode中获取某个键的值,
JsonNode nameNode = (rootNode.get(i)).get("node");
String name = nameNode.asText();
String index=rootNode.get(i).get("index").asText();
String status=rootNode.get(i).get("status").asText();
//找出后置节点 post_node
for(int j=i+1;j<rootNode.size();j++){
String names = (rootNode.get(j)).get("preNode").asText();
if(name.equals(names)){
// if(!"".equals(rootNode.get(j).get("postNode").asText())) {
postNode_set.add(new ChildNode((rootNode.get(j)).get("node").asText()));
//}
}
}
//找前置节点
for(int j=0;j<list.size();j++){
String names = (rootNode.get(j)).get("node").asText();
//对于后一个的index相同时 需要跳过
if(name.equals(names)){
if(!"".equals(rootNode.get(j).get("preNode").asText())){
preNode_set.add(new ChildNode((rootNode.get(j)).get("preNode").asText()));
if(j>i){
++i;
}else{
i++;
}
}else{
preNode_set.add(new ChildNode("0"));
i++;
}
}
}
Node nodes=new Node();
nodes.setIndex(index);
nodes.setNode(name);
nodes.setStatus(status);
nodes.setPostNode(postNode_set);
nodes.setPreNode(preNode_set);
nodeList.add(nodes);
}
//后置节点
Node pre_node=new Node();
pre_node.setNode("9999");
Set<ChildNode> childNodes=new HashSet<>();
for(int i=0;i<rootNode.size();i++){
//最后一个end 节点的pre_node
if("".equals(rootNode.get(i).get("index").asText())){
childNodes.add(new ChildNode(rootNode.get(i).get("preNode").asText()));
}
}
pre_node.setPreNode(childNodes);
nodeList.add(pre_node);
String s = objectMapper.writeValueAsString(nodeList);
System.out.println(s);
System.out.println();
jsonTest(s);
}
/**
* <p>json --> 对象</p>
* @param s
* @throws Exception
*/
public void jsonTest(String s) throws Exception{
List<Node> nodeList=new ArrayList<>();
ObjectMapper objectMapper=new ObjectMapper();
//将字符串用objectMapper转换成jsonNode
JsonNode jsonNode=objectMapper.readTree(s);
List<JsonModel> jsonModels=new ArrayList<>();
for(int i=1;i<jsonNode.size()-1;i++){
String index=jsonNode.get(i).get("index").asText();
String status=jsonNode.get(i).get("status").asText();
String node=jsonNode.get(i).get("node").asText();
for(int j=0;j<jsonNode.get(i).get("preNode").size();j++){
String childNode= jsonNode.get(i).get("preNode").get(j).get("node").asText();
JsonModel jsonModel=new JsonModel(node,childNode,index,status);
jsonModels.add(jsonModel);
}
}
jsonModels.forEach(val->
System.out.println(val.toString())
);
}
以下是所用到的对象实体类
package com.yf.af.biz.test;
/**
* Created by chen on 2017/7/14.
*/
public class JsonModel {
private String node;
private String preNode;
private String index;
private String status;
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
public String getPreNode() {
return preNode;
}
public void setPreNode(String preNode) {
this.preNode = preNode;
}
public String getIndex() {
return index;
}
public void setIndex(String index) {
this.index = index;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public JsonModel(String node, String preNode, String index, String status) {
this.node = node;
this.preNode = preNode;
this.index = index;
this.status = status;
}
public JsonModel() {
}
@Override
public String toString() {
return "JsonModel{" +
"node='" + node + '\'' +
", preNode='" + preNode + '\'' +
", index='" + index + '\'' +
", status='" + status + '\'' +
'}';
}
}
package com.yf.af.biz.test;
import java.util.List;
import java.util.Set;
/**
* Created by chen on 2017/7/15.
*/
public class Node {
private String node;
private String index;
private String status;
private Set<ChildNode> preNode;
private Set<ChildNode> postNode;
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
public String getIndex() {
return index;
}
public void setIndex(String index) {
this.index = index;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Set<ChildNode> getPreNode() {
return preNode;
}
public void setPreNode(Set<ChildNode> preNode) {
this.preNode = preNode;
}
public Set<ChildNode> getPostNode() {
return postNode;
}
public void setPostNode(Set<ChildNode> postNode) {
this.postNode = postNode;
}
@Override
public String toString() {
return "Node{" +
"node='" + node + '\'' +
", index='" + index + '\'' +
", status='" + status + '\'' +
", preNode=" + preNode +
", postNode=" + postNode +
'}';
}
public Node() {
}
}
package com.yf.af.biz.test;
/**
* Created by chen on 2017/7/15.
*/
public class ChildNode {
private String node;
public String getNode() {
return node;
}
public void setNode(String node) {
this.node = node;
}
public ChildNode(String node) {
this.node = node;
}
public ChildNode() {
}
}
java 对象与json互转的更多相关文章
- java对象与json互转
package com.liveyc; import java.io.StringWriter; import org.junit.Test; import com.fasterxml.jackson ...
- java对象与json串互转
1:java对象与json串转换: java对象—json串: JSONObject JSONStr = JSONObject.fromObject(object); String str = JSO ...
- Java对象、Json、Xml转换工具Jackson使用
在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson.JSON-lib.Jackson等等.本文主要介绍Jackson的使用,Jacks ...
- json相关类库,java对象与json相互转换
有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...
- java对象与json对象间的相互转换
工程中所需的jar包,因为在网上不太好找,所以我将它放到我的网盘里了,如有需要随便下载. 点击下载 1.简单的解析json字符串 首先将json字符串转换为json对象,然后再解析json对象,过程如 ...
- JSON-lib框架,JAVA对象与JSON、XML之间的相互转换
Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作 ...
- java对象转json应clone,避免生成json串有问题
今天因为一个java对象转json,搞了我一下午,在些记录一下: 是这样:我在strtuts2的action中调用services返回 Row: 26, 中国银行海鹰, 29, 东楼, 36, 1F ...
- java对象和json对象之间互相转换
import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.Li ...
- JackSon将java对象转换为JSON字符串
JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的writeValueA ...
随机推荐
- Angular随笔第二课
一. 列表表格以及其它迭代型元素 ng-repeat 可能是最有用的angular指令了,它可以根据集合中的项目一次创建一组元素的多份拷贝.不管在什么地方,只要你想创建一组事物的列表,你就可以使用这 ...
- C++ STL快速入门
在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表.队列等,第一次接触C++ STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就 ...
- OVS 中的 upcall 线程
总体概览如下: 假设upcall handler线程有两个,vport有四个,那么每个vport下都将持有两个NetLink连接的信息,这两个NetLink连接将被用来上送upcall消息. 每个Ne ...
- 一天搞定CSS:盒模型content、padding、border、margin--06
1.盒模型 网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物 ...
- Yii2项目实现Markdown功能 在线Markdown编辑器
版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处. Yii中添加MarkDown编辑器 主要使用了两个网页Markdown编辑器,都带预览功能. 1,ijackua/yii2-lepture ...
- 【原创+史上最全】Nginx+ffmpeg实现流媒体直播点播系统
#centos6.6安装搭建nginx+ffmpeg流媒体服务器 #此系统实现了视频文件的直播及缓存点播,并支持移动端播放(支持Apple和Android端) #系统需要自行安装,流媒体服务器配置完成 ...
- Xamarin App文件(apk)大小和启动时间的影响因素
Xamarin开发的时候大家都有一个疑问,就是apk文件会不会特别的大,启动会不会很慢.答案是肯定的,文件肯定大,启动肯定会慢,但是具体大多少.具体慢多少,有什么因素可以使apk文件稍微小一点.可以使 ...
- JavaScript概念总结:作用域、闭包、对象与原型链
1 JavaScript变量作用域 1.1 函数作用域 没有块作用域:即作用域不是以{}包围的,其作用域完成由函数来决定,因而if /for等语句中的花括号不是独立的作用域. 如前述,JS的在函数中定 ...
- Lucene全文搜索之分词器:使用IK Analyzer中文分词器(修改IK Analyzer源码使其支持lucene5.5.x)
注意:基于lucene5.5.x版本 一.简单介绍下IK Analyzer IK Analyzer是linliangyi2007的作品,再此表示感谢,他的博客地址:http://linliangyi2 ...
- 利用Excel做一些简单的数据分析
先来几个原始数据的截图,如下所示: 示例图就举一个吧,因为这些数据量还挺大的,大概的总结了一下,这下列这几栏中不合规范的数据占比很大: (1)民族(经分析,在此表中所涉及到的民族分别为:汉族,满族,蒙 ...