首页 / Java 基础 / Java 基础语法
第 1 章
Java 基础语法

Java 基础语法

共0节课 601 人已学习
  • 会员终身免费
    • 课程目录
    • 课程信息

    第一节 Java 入门

    第二节 Java 语法

    课程咨询

    0人咨询

    导言

    Java 17.png

    本次的博客,笔者将会向读者分享的是,如何通过freemarker的模板生成HTML的文件。众所周知,有时候项目上需要开发人员通过java的代码动态生成HTML文件,如日报、月报、账务报表等。为了可提高访问的性能,我们会预先生成HTML文件,这个的话可以提高访问的效率。在这一次博客中,笔者将会通过一个例子来分享这个功能,这个例子的功能点是:首先,将一份Json的文件转化为对象,及将对象转换为Json字符串;其次,将Map的数据转化为HTML文件;最后,通过js技术对HTML的页面做一些修改。那么,在博客中,笔者向读者分享如何将Json转化为对象和将对象转换为json字符串。(注意,可能之前的博客,笔者有写过类似的文章,但本次使用的包和方法不一样。)


    将对象封装成Json字符串

    如果读者在平时开发时使用的这个类net.sf.json.JSONObject,那么可以直接用JSONObject.fromObject()的方法将对象转化为JSON的字符串。如果读者要自己写一个方法来转换的话,那么需要考虑的是被转换的对象是Map类型还是List类型或是其它的类型。笔者在开发时经常是对于Map类型和List类型来进行转换为Json的字符串,对于其它的类型是不处理的。所以以下的代码可能的点局限性,笔者可以在此基础上进行拭修改。


    public static Object jsonEnclose(Object obj) {
            try {
                if (obj instanceof Map) {   //如果是Map则转换为JsonObject
                    Map<String, Object> map = (Map<String, Object>)obj;
                    Iterator<Entry<String, Object>> iterator = map.entrySet().iterator();
                    JSONStringer jsonStringer = (JSONStringer) new JSONStringer().object();
                    while (iterator.hasNext()) {
                        Entry<String, Object> entry = iterator.next();
                        jsonStringer.key(entry.getKey()).value(jsonEnclose(entry.getValue()));
                    }
                    JSONObject jsonObject = new JSONObject(new JSONTokener(jsonStringer.endObject().toString()));
                    return jsonObject;
                } else if (obj instanceof List) {  //如果是List则转换为JsonArray
                    List<Object> list = (List<Object>)obj;
                    JSONStringer jsonStringer = (JSONStringer) new JSONStringer().array();
                    for (int i = 0; i < list.size(); i++) {
                        jsonStringer.value(jsonEnclose(list.get(i)));
                    }
                    JSONArray jsonArray = new JSONArray(new JSONTokener(jsonStringer.endArray().toString()));
                    return jsonArray;
                } else {
                    return obj;
                }
            } catch (Exception e) {
                
                return e.getMessage();
            }
        }

     将Json字符串转换为对象

    上面的方法中,笔者向大家介绍了如何将对象转换为Json字符串,那么接下笔者将向大家介绍如何将Json字符串转换为对象。大伙儿都知道,Json的格式有以两个[]中括号开始的可以两个{}大括号开始的,所以在转换之前,我们需要做判断。笔者使用的方法是会用正则表达式来判断。如:"\"([^\\\" ]+?)\":"判断是否以[]中括号开始,"^\\{.*\\}$"这个是判断是否以大括号开始的。其实,看到这些读者应该知道,这两都对应的就是JsonArray和JsonObject。当然,我们知道,Json的文件可能含有嵌套的Json,也就是说多层的json,所以要将这个文件完全转换为对象,需要我们使用递归的方法,这个才可将Json文件完全转换为对象。


    private final static String regex = "\"([^\\\" ]+?)\":";
     
        /**
         * 一个方法解析多层json数据  json + 正则 + 递归
         * @param jsonStr
         * @return 
         */
        public static Object jsonParse(final String jsonStr) {
            if (jsonStr == null) throw new NullPointerException("JsonString shouldn't be null");
            try {
                if (isJsonObject(jsonStr)) {
                    final Pattern pattern = Pattern.compile(regex);
                    final Matcher matcher = pattern.matcher(jsonStr);
                    final Map<String, Object> map = new HashMap<String, Object>();
                    final JSONObject jsonObject = new JSONObject(jsonStr);
                    try {
                        while (matcher.find()) {
                            String groupName = matcher.group(1);
                            Object obj = jsonObject.opt(groupName);
                            if (isJsonObject(obj+"") || isJsonArray(obj+"")) {
                                matcher.region(matcher.end() + (obj+"").replace("\\", "").length(), matcher.regionEnd());
                                map.put(groupName, jsonParse(obj+""));
                            } else {
                            if(obj != null)
                                map.put(groupName, obj+"");
                            }
                        }
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                    return map;
                } else if (isJsonArray(jsonStr)) {
                    List<Object> list = new ArrayList<Object>();
                    try {
                        JSONArray jsonArray = new JSONArray(jsonStr);
                        for (int i = 0; i < jsonArray.length(); i++) {
                            Object object = jsonArray.opt(i);
                            list.add(jsonParse(object+""));
                        }
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                    return list;
                } 
            } catch (Exception e) {
                // TODO: handle exception
            }
            return jsonStr;
        }



    ————————————————

    版权声明:本文为CSDN博主「Owen William」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/owen_william/article/details/86705506


    在线
    客服

    官方客服

    如遇课程或支付问题,请联系客服为您解决

    电话客服:17352832859

    Q Q客服:联系客服

    工作时间:9:00-18:00,节假日休息

    顶部