天天看點

java與json互相轉換(解決日期問題)

blog遷移至:[url=http://www.micmiu.com]http://www.micmiu.com[/url]

JSON 即 JavaScript Object Natation,它是一種輕量級的資料交換格式,非常适合于伺服器與 JavaScript 的互動。本文主要講解下java和JSON之間的轉換,特别是[color=red]解決互相轉換遇到日期問題和指定屬性的過濾[/color]。

一、需要相關的jar包:

json-lib-xxx.jar

ezmorph-xxx.jar

commons-httpclient-xxx.jar

commons-lang-xxx.jar

commons-logging-xxx.jar

commons-collections-xxx.jar

上面的包可以從下面的連接配接下載下傳:

[url=http://commons.apache.org/index.html]http://commons.apache.org/index.html[/url]

[url=http://json-lib.sourceforge.net]http://json-lib.sourceforge.net[/url]

[url=http://ezmorph.sourceforge.net]http://ezmorph.sourceforge.net[/url]

二、java-》JSON

1.[color=red]List-》JSON[/color]

列印結果:[color=blue]list->json:["apple","orange"][/color]

2.[color=red]Map-》JSON[/color]

Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", "Michael");
        map.put("baby", new String[] { "Lucy", "Lily" });
        map.put("age", 30);
        JSONObject jo = JSONObject.fromObject(map);
        System.out.println("map->json:" + jo.toString());
           

列印結果:[color=blue]map->json:{"age":30,"name":"Michael","baby":["Lucy","Lily"]}[/color]

3.[color=red]bean->JSON[/color]

列印結果:[color=blue]bean->json:{"age":1,"born":{"date":10,"day":3,"hours":14,"minutes":14,"month":2,"seconds":1,"time":1268201641228,"timezoneOffset":-480,"year":110},"name":"NewBaby"}[/color]

4.[color=red]bean->JSON 日期轉換[/color]

[color=red]上面的例子中你會發現它把bean對象裡的util.Date這個類型的所有屬性一一轉換出來。在實際運用過程中,大多數情況下我們希望能轉化為yyyy-MM-dd這種格式[/color],下面就講一講如何實作:

首先要寫一個新的類[color=red]JsonDateValueProcessor[/color]如下:

測試代碼:

列印結果:[color=blue]bean->json:{"age":1,"born":"2010-03-10","name":"NewBaby"}[/color]

這就能得到我們想要的結果了。

4.[color=red]java->JSON 過濾指定的屬性[/color]

JsonBean bean = new JsonBean();
        bean.setName("NewBaby");
        bean.setAge(1);
        bean.setBorn(new Date());
        jo = JSONObject.fromObject(bean);

        JsonConfig jsonConfig = new JsonConfig();

        PropertyFilter filter = new PropertyFilter() {
            public boolean apply(Object source, String name, Object value) {
                if ("born".equals(name)) {
                    return true;
                }
                return false;
            }
        };
        jsonConfig.setJsonPropertyFilter(filter);

        njo = JSONObject.fromObject(bean, jsonConfig);
        System.out.println("bean->json [add property filter] :"
                + njo.toString());
           

列印結果:bean->json [add property filter] :{"age":1,"name":"NewBaby"}

從執行結果可以看出:born 這個屬性已經成功過濾掉了。

三、JSON-》java

1.[color=red]如何把json的yyyy-MM-dd的轉換為Bean中的util.Date類型[/color]:

列印結果:

[color=blue]1984-01-12[/color]

[color=blue]1990-05-01[/color]

2. [color=red]JSON-》List、 Map[/color]

列印結果:

[color=blue]apple[/color]

[color=blue]orange[/color]

[color=blue]name Michael[/color]

[color=blue]age 30[/color]

[color=blue]baby [Lucy, Lily][/color]