Json转化与ExtJS树(后台处理)

    xiaoxiao2022-07-13  137

    一、JSON对格式化数据的操作:

    1.导入依赖包:

    import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;

    2.Map转化为JSON数组:

    //声明一个Hash对象并添加数据 Map params = new HashMap(); params.put("username", username); params.put("user_json", user); //声明JSONArray对象并输入JSON字符串 JSONArray array = JSONArray.fromObject(params); put.println(array.toString());

    3.String 转换为JSON对象

    import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; //别忘了添加上JSON包哦! public class StringToJSON { public static void main(String[] args) throws JSONException{ System.out.println("abc"); //定义JSON字符串 String jsonStr = "{\"id\": 2," + " \"title\": \"json title\", " + "\"config\": {" + "\"width\": 34," + "\"height\": 35," + "}, \"data\": [" + "\"JAVA\", \"JavaScript\", \"PHP\"" + "]}"; //转换成为JSONObject对象 JSONObject jsonObj = new JSONObject(jsonStr); //从JSONObject对象中获取数据 JavaBean bean = new JavaBean(); //根据属性名称获取int型数据; bean.setId(jsonObj.getInt("id")); //根据属性名获取String数据; bean.setTitle(jsonObj.getString("title")); //根据属性名获取JSONObject类 JSONObject config = jsonObj.getJSONObject("config"); bean.setWidth(config.getInt("width")); bean.setHeight(config.getInt("height")); //根据属性名获取JSONArray数组 JSONArray data = jsonObj.getJSONArray("data"); for(int index = 0, length = data.length(); index < length; index++) { //这里在org.json.JSONArray对象中居然没有找到toArray方法,求各位网友给出解决办法啊! // bean.setLanguages(String[]); } } } class JavaBean{ private int id ; private String title; private int width; private int height; private String[] languages; //这里省略了设置器和访问器 }

    4.JSON转化为String

    public static void main(String[] args) throws JSONException { //创建JSONObject对象 JSONObject json = new JSONObject(); //向json中添加数据 json.put("username", "wanglihong"); json.put("height", 12.5); json.put("age", 24); //创建JSONArray数组,并将json添加到数组 JSONArray array = new JSONArray(); array.put(json); //转换为字符串 String jsonStr = array.toString(); System.out.println(jsonStr); }

    5.集合转换为JSON

    public static void main(String[] args)throws JSONException{ //初始化ArrayList集合并添加数据 List<String> list = new ArrayList<String>(); list.add("username"); list.add("age"); list.add("sex"); //初始化HashMap集合并添加数组 Map map = new HashMap(); map.put("bookname", "CSS3实战"); map.put("price", 69.0); //初始化JSONArray对象,并添加数据 JSONArray array = new JSONArray(); array.put(list); array.put(map); //生成的JSON字符串为:[["username","age","sex"],{"price":69,"bookname":"CSS3实战"}] }

    6.数据读写:

    读数据:

    import java.io.FileNotFoundException; import java.io.FileReader; import com.google.gson.JsonArray; import com.google.gson.JsonIOException; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; public class Json_read { public static void main(String[] args) { try { JsonParser parser = new JsonParser(); JsonObject object = (JsonObject) parser.parse(new FileReader("test.json")); System.out.println("cat="+object.get("cat").getAsString()); System.out.println("pop="+object.get("pop").getAsBoolean()); JsonArray array = object.get("languages").getAsJsonArray(); for(int i=0;i<array.size();i++){ System.out.println("--------"); JsonObject subObject = array.get(i).getAsJsonObject(); System.out.println("id="+subObject.get("id").getAsInt()); System.out.println("name="+subObject.get("name").getAsString()); System.out.println("ide="+subObject.get("ide").getAsString()); } } catch (JsonIOException e) { e.printStackTrace(); } catch (JsonSyntaxException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }

    写数据:

    import com.google.gson.JsonArray; import com.google.gson.JsonObject; public class Json_Write { public static void main(String[] args) { JsonObject object = new JsonObject();//整体jsonobject容器 object.addProperty("cat", "it"); JsonArray array = new JsonArray(); JsonObject lan1 = new JsonObject(); lan1.addProperty("id", 1); lan1.addProperty("name", "java"); lan1.addProperty("ide", "eclipse"); array.add(lan1); JsonObject lan2 = new JsonObject(); lan2.addProperty("id", 2); lan2.addProperty("name", "switf"); lan2.addProperty("ide", "XCode"); array.add(lan2); JsonObject lan3 = new JsonObject(); lan3.addProperty("id", 3); lan3.addProperty("name", "c#"); lan3.addProperty("ide", "visual studio"); array.add(lan3); object.add("languages", array); object.addProperty("pop", true); System.out.println(object.toString()); } }

    testJson:

    { "cat":"it", "languages":[ {"id":1,"ide":"Eclipse","name":"Java"}, {"id":2,"ide":"XCode","name":"Swift"}, {"id":3,"ide":"Visual studio","name":"c#"} ], "pop":true }

     

    二、将字符串转换为ExtJS树:

    1.符合ExtJS树结果的转义json:

    [{\"id\":\"5\",\"parentId\":\"1\",\"nodeCode\":\"ITOB\",\"text\":\"IT对象\",\"nodeNote\":\"null\",\"children\":[{\"id\":\"488\",\"parentId\":\"5\",\"nodeCode\":\"APP\",\"text\":\"应用资源\",\"nodeNote\":\"null\",\"leaf\":\"true\"},{\"id\":\"491\",\"parentId\":\"5\",\"nodeCode\":\"USER\",\"text\":\"用户\",\"nodeNote\":\"null\",\"leaf\":\"true\"},{\"id\":\"490\",\"parentId\":\"5\",\"nodeCode\":\"DATA\",\"text\":\"数据资源\",\"nodeNote\":\"null\",\"leaf\":\"true\"},{\"id\":\"487\",\"parentId\":\"5\",\"nodeCode\":\"HDWE\",\"text\":\"硬件资源\",\"nodeNote\":\"null\",\"leaf\":\"true\"},{\"id\":\"489\",\"parentId\":\"5\",\"nodeCode\":\"SRV\",\"text\":\"服务资源\",\"nodeNote\":\"null\",\"leaf\":\"true\"},{\"id\":\"492\",\"parentId\":\"5\",\"nodeCode\":\"ROLE\",\"text\":\"角色\",\"nodeNote\":\"null\",\"leaf\":\"true\"}]}]

    2.TreeNode实体:

    import java.util.*; public class TreeNode { private String id; private String text; private String parentId; private String iconCls; private String cls; private String uiProvider; private Boolean checkbox; private Boolean checked; private Boolean leaf; private Boolean expanded; private List<TreeNode> children; private Map<String, String> data; public TreeNode() { this.id = ""; this.text = ""; this.parentId = ""; this.iconCls = ""; this.cls = "forum"; this.uiProvider = ""; this.checkbox = false; this.checked = false; this.leaf = true; this.expanded = false; this.children = new ArrayList<TreeNode>(); this.data = new HashMap<String, String>(); } public String getId() { return this.id; } public void setId(final String id) { this.id = id; } public String getText() { return this.text; } public void setText(final String text) { this.text = text; } public String getParentId() { return this.parentId; } public void setParentId(final String parentId) { this.parentId = parentId; } public String getIconCls() { return this.iconCls; } public void setIconCls(final String iconCls) { this.iconCls = iconCls; } public String getCls() { return this.cls; } public void setCls(final String cls) { this.cls = cls; } public String getUiProvider() { return this.uiProvider; } public void setUiProvider(final String uiProvider) { this.uiProvider = uiProvider; } public Boolean getCheckbox() { return this.checkbox; } public void setCheckbox(final Boolean checkbox) { this.checkbox = checkbox; } public Boolean getChecked() { return this.checked; } public void setChecked(final Boolean checked) { this.checked = checked; } public Boolean getLeaf() { return this.leaf; } public void setLeaf(final Boolean leaf) { this.leaf = leaf; } public Boolean getExpanded() { return this.expanded; } public void setExpanded(final Boolean expanded) { this.expanded = expanded; } public List<TreeNode> getChildren() { return this.children; } public void setChildren(final List<TreeNode> children) { this.children = children; } public Map<String, String> getData() { return this.data; } public void setData(final Map<String, String> data) { this.data = data; } }

    3.ExtJS格式解析:(参考:https://zyjustin9.iteye.com/blog/2170196)

    id:"id" //节点ID text:"节点文本" //节点显示的文本 cls:"folder/file" //节点显示的样式:文件夹或文件 pid:"id" //父节点的ID leaf:true //是否是叶子节点 expanded:fasle //是否展开,默认不展开 checked:false //true则在text前有个选中的复选框,false则text前有个未选中的复选框,默认没有任何框框 href:"http://www.123.com" //节点的链接地址 hrefTarget:"mainFrame" //打开节点链接地址默认为blank,可以设置为iframe名称id,则在iframe中打开 qtip:"提示" //提示信息,不过要有Ext.QuickTips.init(); singleClickExpand:true //用单击文本展开,默认为双击

    4.代码转化 (可以去参考https://blog.csdn.net/cronousgt/article/details/53502999)

    //初始化数据 List<TreeNode> treeList =new ArrayList<TreeNode>(); TreeNode tns =new TreeNode(); tns.setId("root"); tns.setText("质量检测"); tns.setParentId(null); treeList.add(tns); Map<String,String> map =new HashMap<>(); Recursion r = new Recursion(); JSONObject ob=null; JSONArray a=null; JSONObject cc =null; try { ob =new JSONObject(aa);//将String数据转换为可以操作的json数据 a =ob.getJSONArray("profiles");//将子Json数组 for(int i=0;i<a.length();i++){//获取json数组中的数据 cc =new JSONObject(a.get(i).toString()); tns =new TreeNode(); tns.setId(cc.getString("key").toString());//id tns.setText(cc.getString("name").toString());//text tns.setParentId(cc.getString("languageName").toString());//parentId,父节点 map.put(cc.getString("languageName").toString(), cc.getString("languageName").toString()); treeList.add(tns); } for(String v : map.values()){ tns =new TreeNode(); tns.setId(v);//id tns.setText(v);//text tns.setParentId("root");//parentId,父节点 treeList.add(tns); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); }

    将List<T>中的数据组装成ExtJS树:

    //利用双重循环形成一棵树。 List<TreeNode> rootTree = new ArrayList<TreeNode>(); for(TreeNode treeNode : treeList){ //判断是否为root跟节点,是就加入rootTree if(treeNode.getParentId()==null){ rootTree.add(treeNode); } for(TreeNode t : treeList){ if(t.getParentId()!=null&&t.getParentId().equals(treeNode.getId())){ if(treeNode.getChildren() == null){ List<TreeNode> myChildrens = new ArrayList<TreeNode>(); myChildrens.add(t); treeNode.setChildren(myChildrens); }else{ treeNode.getChildren().add(t); } treeNode.setLeaf(false); } } } return rootTree; }

     

     

    最新回复(0)