Jackson的使用

以前转换json的时候最常用的就是jsonobject及jsonarray等常用的基本方法。但是有次转一个特别长的对象的时候速度特别慢,当时用了jackson,速度立马提升了100+

这里主要写下生成json及解析json的主要方法:


public static void generateJson() {
        try {
            JsonFactory jfactory = new JsonFactory();
            JsonGenerator jGenerator = jfactory.createJsonGenerator(new File("c:\\user.json"), JsonEncoding.UTF8);
            jGenerator.writeStartObject(); // {
            jGenerator.writeStringField("name", "mkyong"); // "name" : "mkyong"
            jGenerator.writeNumberField("age", 29); // "age" : 29

            jGenerator.writeFieldName("messages"); // "messages" :
            jGenerator.writeStartArray(); // [

            jGenerator.writeString("msg 1"); // "msg 1"
            jGenerator.writeString("msg 2"); // "msg 2"
            jGenerator.writeString("msg 3"); // "msg 3"

            jGenerator.writeEndArray(); // ]
            jGenerator.writeEndObject(); // }
            jGenerator.close();

        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void analiseJson() {
        try {
            JsonFactory jfactory = new JsonFactory();
            JsonParser jParser = jfactory.createJsonParser(new File("c:\\user.json"));

            while (jParser.nextToken() != JsonToken.END_OBJECT) {

                String fieldname = jParser.getCurrentName();
                if ("name".equals(fieldname)) {
                    //当前结点为name
                    jParser.nextToken();
                    System.out.println(jParser.getText()); // 输出 mkyong

                }
                if ("age".equals(fieldname)) {
                    // 当前结点为age
                    // move to next, which is "name"'s value
                    jParser.nextToken();
                    System.out.println(jParser.getIntValue()); // display 29
                }

                if ("messages".equals(fieldname)) {
                    jParser.nextToken();
                    while (jParser.nextToken() != JsonToken.END_ARRAY) {
                        // display msg1, msg2, msg3
                        System.out.println(jParser.getText());
                    }
                }

            }
            jParser.close();

        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


参考文档:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html

http://blog.csdn.net/jackyrongvip/article/details/6689571

jsonObject的put,accumulate及element方法的区别

public Object put (Object key, Object value) 将value映射到key下。如果此JSONObject对象之前存在一个value在这个key下,当前的value会替换掉之前的value

public JSONObject accumulate (String key, Object value) 累积value到这个key下。这个方法同element()方法类似,特殊的是,如果当前已经存在一个value在这个key下那么一个JSONArray将会存储在这个key下来保存所有累积的value。如果已经存在一个JSONArray,那么当前的value就会添加到这个JSONArray中
。相比之下replace方法会替代先前的value

public JSONObject element (String key, Object value) 将键/值对放到这个JSONObject对象里面。如果当前value为空(null),那么如果这个key存在的话,这个key就会移除掉。如果这
个key之前有value值,那么此方法会调用accumulate()方法。

参考文档:http://blog.csdn.net/cocodehouse/article/details/5996088

另外对于用前端js生成一个json对象的话可以使用如下的方法:


function _ToJSON(o) {
    if (o == null)
        return "null";

    switch (o.constructor) {
        case String:
            var s = o; // .encodeURI();
            if (s.indexOf("}") < 0)s = '"' + s.replace(/(["\\])/g, '\\$1') + '"';
            s = s.replace(/\n/g, "\\n");
            s = s.replace(/\r/g, "\\r");
            return s;
        case Array:
            var v = [];
            for (var i = 0; i < o.length; i++)
                v.push(_ToJSON(o[i]));
            if (v.length <= 0)return "\"\"";
            return "" + v.join(",") + "";
        case Number:
            return isFinite(o) ? o.toString() : _ToJSON(null);
        case Boolean:
            return o.toString();
        case Date:
            var d = new Object();
            d.__type = "System.DateTime";
            d.Year = o.getUTCFullYear();
            d.Month = o.getUTCMonth() + 1;
            d.Day = o.getUTCDate();
            d.Hour = o.getUTCHours();
            d.Minute = o.getUTCMinutes();
            d.Second = o.getUTCSeconds();
            d.Millisecond = o.getUTCMilliseconds();
            d.TimezoneOffset = o.getTimezoneOffset();
            return _ToJSON(d);
        default:
            if (o["toJSON"] != null && typeof o["toJSON"] == "function")
                return o.toJSON();
            if (typeof o == "object") {
                var v = [];
                for (attr in o) {
                    if (typeof o[attr] != "function")
                        v.push('"' + attr + '": ' + _ToJSON(o[attr]));
                }

                if (v.length > 0)
                    return "{" + v.join(",") + "}";
                else
                    return "{}";
            }
            alert(o.toString());
            return o.toString();
    }
};


参考文档:http://hi.baidu.com/adnia/item/55141b5e4cd4cd13db1635d6

总结一下,这里主要介绍了jackson及jsonobject中的put和accumulate的区别。另外如何用js来生成json对象。




你可能感兴趣的:(Jackson的使用)