java 对象与json互转
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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对象内容
1 JsonModel{node=‘xxx_2‘, preNode=‘‘, index=‘index_1‘, status=‘表达式1‘} 2 JsonModel{node=‘xxx_14‘, preNode=‘‘, index=‘index_4‘, status=‘表达式5‘} 3 JsonModel{node=‘xxx_3‘, preNode=‘‘, index=‘index_2‘, status=‘表达式2‘} 4 JsonModel{node=‘xxx_4‘, preNode=‘‘, index=‘index_3‘, status=‘表达式3‘} 5 JsonModel{node=‘xxx_5‘, preNode=‘xxx_2‘, index=‘index_4‘, status=‘表达式4‘} 6 JsonModel{node=‘xxx_5‘, preNode=‘xxx_3‘, index=‘index_4‘, status=‘表达式5‘} 7 JsonModel{node=‘xxx_5‘, preNode=‘xxx_14‘, index=‘index_4‘, status=‘表达式5‘} 8 JsonModel{node=‘xxx_6‘, preNode=‘xxx_5‘, index=‘index_5‘, status=‘表达式6‘} 9 JsonModel{node=‘xxx_7‘, preNode=‘xxx_6‘, index=‘index_6‘, status=‘表达式7‘} 10 JsonModel{node=‘xxx_8‘, preNode=‘xxx_7‘, index=‘index_4‘, status=‘表达式8‘} 11 JsonModel{node=‘xxx_9‘, preNode=‘xxx_8‘, index=‘index_5‘, status=‘表达式5‘} 12 JsonModel{node=‘xxx_10‘, preNode=‘xxx_8‘, index=‘index_7‘, status=‘表达式6‘} 13 JsonModel{node=‘xxx_11‘, preNode=‘xxx_10‘, index=‘index_8‘, status=‘表达式7‘} 14 JsonModel{node=‘xxx_11‘, preNode=‘xxx_9‘, index=‘index_8‘, status=‘表达式8‘} 15 JsonModel{node=‘xxx_12‘, preNode=‘xxx_11‘, index=‘index_8‘, status=‘表达式7‘} 16 JsonModel{node=‘xxx_12‘, preNode=‘xxx_4‘, index=‘index_8‘, status=‘表达式8‘} 17 JsonModel{node=‘xxx_13‘, preNode=‘xxx_14‘, index=‘‘, status=‘表达式13‘} 18 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()) ); }
以下是所用到的对象实体类
1 package com.yf.af.biz.test; 2 3 /** 4 * Created by chen on 2017/7/14. 5 */ 6 public class JsonModel { 7 private String node; 8 private String preNode; 9 private String index; 10 private String status; 11 12 public String getNode() { 13 return node; 14 } 15 16 public void setNode(String node) { 17 this.node = node; 18 } 19 20 public String getPreNode() { 21 return preNode; 22 } 23 24 public void setPreNode(String preNode) { 25 this.preNode = preNode; 26 } 27 28 public String getIndex() { 29 return index; 30 } 31 32 public void setIndex(String index) { 33 this.index = index; 34 } 35 36 public String getStatus() { 37 return status; 38 } 39 40 public void setStatus(String status) { 41 this.status = status; 42 } 43 44 public JsonModel(String node, String preNode, String index, String status) { 45 this.node = node; 46 this.preNode = preNode; 47 this.index = index; 48 this.status = status; 49 } 50 51 public JsonModel() { 52 } 53 54 @Override 55 public String toString() { 56 return "JsonModel{" + 57 "node=‘" + node + ‘\‘‘ + 58 ", preNode=‘" + preNode + ‘\‘‘ + 59 ", index=‘" + index + ‘\‘‘ + 60 ", status=‘" + status + ‘\‘‘ + 61 ‘}‘; 62 } 63 }
1 package com.yf.af.biz.test; 2 3 import java.util.List; 4 import java.util.Set; 5 6 /** 7 * Created by chen on 2017/7/15. 8 */ 9 public class Node { 10 private String node; 11 private String index; 12 private String status; 13 14 private Set<ChildNode> preNode; 15 16 private Set<ChildNode> postNode; 17 18 public String getNode() { 19 return node; 20 } 21 22 public void setNode(String node) { 23 this.node = node; 24 } 25 26 public String getIndex() { 27 return index; 28 } 29 30 public void setIndex(String index) { 31 this.index = index; 32 } 33 34 public String getStatus() { 35 return status; 36 } 37 38 public void setStatus(String status) { 39 this.status = status; 40 } 41 42 public Set<ChildNode> getPreNode() { 43 return preNode; 44 } 45 46 public void setPreNode(Set<ChildNode> preNode) { 47 this.preNode = preNode; 48 } 49 50 public Set<ChildNode> getPostNode() { 51 return postNode; 52 } 53 54 public void setPostNode(Set<ChildNode> postNode) { 55 this.postNode = postNode; 56 } 57 58 @Override 59 public String toString() { 60 return "Node{" + 61 "node=‘" + node + ‘\‘‘ + 62 ", index=‘" + index + ‘\‘‘ + 63 ", status=‘" + status + ‘\‘‘ + 64 ", preNode=" + preNode + 65 ", postNode=" + postNode + 66 ‘}‘; 67 } 68 69 70 public Node() { 71 } 72 }
1 package com.yf.af.biz.test; 2 3 /** 4 * Created by chen on 2017/7/15. 5 */ 6 public class ChildNode { 7 private String node; 8 9 public String getNode() { 10 return node; 11 } 12 13 public void setNode(String node) { 14 this.node = node; 15 } 16 17 public ChildNode(String node) { 18 this.node = node; 19 } 20 21 public ChildNode() { 22 } 23 }
以上是关于java 对象与json互转的主要内容,如果未能解决你的问题,请参考以下文章