1.Json

Json現(xiàn)在在開發(fā)中用的非常非常多,可以說無處不在,主要用于數(shù)據(jù)格式的傳輸。在十年前,還是XML一統(tǒng)天下的時候,現(xiàn)在是Json的時代了,不管是在java開發(fā)后端程序,還是js開發(fā)前端程序, 都是利用json格式來進(jìn)行數(shù)據(jù)傳輸。包括現(xiàn)在最火的RESTFul調(diào)用,格式也都是標(biāo)準(zhǔn)的Json。

到底什么是json呢?

百度百科介紹:JSON(JavaScript Object Notation, JS 對象標(biāo)記) 是一種輕量級的數(shù)據(jù)交換格式。它基于 ECMAScript 規(guī)范的一個子集,采用完全獨(dú)立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言。 易于人閱讀和編寫,同時也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。

任何支持的類型都可以通過 JSON 來表示,例如字符串、數(shù)字、對象、數(shù)組等。對象和數(shù)組是比較特殊且常用的兩種類型,且兩種對象可以相互嵌套。

表示對象,JSON最常用的格式是對象的 鍵值對,一個key對應(yīng)一個value

{"firstName": "Brett", "lastName": "McLaughlin"}

表示數(shù)組

{ "people":
    [ 
      {"firstName": "Brett","lastName":"McLaughlin"  },
      {"firstName":"Jason","lastName":"Hunter"}
    ]
}

數(shù)據(jù)格式非常簡單,簡要說明就是:

  • 對象表示為鍵值對
  • 數(shù)據(jù)由逗號分隔
  • 花括號保存對象
  • 方括號保存數(shù)組

由上面簡單的幾種格式就可以囊括所有的數(shù)據(jù)類型了。

Json和XML比較

1、可讀性
JSON和XML的可讀性可謂不相上下,一邊是簡易的語法,一邊是規(guī)范的標(biāo)簽形式,很難分出勝負(fù)。

2、可擴(kuò)展性
XML天生有很好的擴(kuò)展性,JSON當(dāng)然也有,沒有什么是XML可以擴(kuò)展而JSON卻不能擴(kuò)展的。不過JSON在Javascript主場作戰(zhàn),可以存儲Javascript復(fù)合對象,有著xml不可比擬的優(yōu)勢。

3、編碼難度
XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有提供的工具。比如JSONObject、Jackson、fastJson等等,和XML相比,都相當(dāng)簡單。

Json例子

常見的Json解析的工具比較多,這里介紹Jackson,這也是國內(nèi)外用的最多的,而且和其他工具結(jié)合最緊密的。Json在進(jìn)行傳輸時還會用在消息隊列的序列化方面,這個后面會講。阿里開源的fastjson也是非常好的工具,有興趣的可以通過度娘搜一下看看。

pom.xml引入對應(yīng)的jar包

 <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.4</version>
        </dependency>

引入一個jar包即可

Json常用的例子就是把一個對象轉(zhuǎn)成json串,把json串轉(zhuǎn)成對應(yīng)的對象。

model對象,舉例子

public class User {
 private int id;
    private String name;
    private Date createDate;//創(chuàng)建日期

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
//其他get、set忽略
}

這里說一個特殊情況,在實體類中定義了日期格式,轉(zhuǎn)json字符串的時候,需要指定日期格式化的格式。這里使用了
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")來指定日期的格式化格式。比較好用

Json工具類,這個可以直接拿到項目中使用

public class JsonUtil {
    private static ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 把對象轉(zhuǎn)成json串
     *
     * @param obj
     * @return
     */
    public static String toStr(Object obj) {
        String json_str = "";
        try {
            json_str = objectMapper.writer().writeValueAsString(obj);
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return json_str;
    }

    /**
     * json轉(zhuǎn)對象
     *
     * @param jsonStr
     * @param valueType
     * @return
     */
    public static <T> T toObject(String jsonStr, Class<T> valueType) {
        if (objectMapper == null) {
            objectMapper = new ObjectMapper();
        }
        try {
            return objectMapper.readValue(jsonStr, valueType);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

使用例子如下:

public static void main(String[] args) {
        //對象轉(zhuǎn)json
        User user = new User(1, "張三", new Date());
        System.out.println(JsonUtil.toStr(user));

        List<User> listUser = new ArrayList<>();
        listUser.add(user);
        System.out.println(JsonUtil.toStr(listUser));

        //json轉(zhuǎn)對象
        User user2 = JsonUtil.toObject("{\"id\":1,\"name\":\"張三\",\"createDate\":\"2017-05-14 20:18:49\"}", User.class);
        System.out.println(user2.toString());

        List<User> list2 = JsonUtil.toObject("[{\"id\":1,\"name\":\"張三\",\"createDate\":\"2017-05-14 20:22:12\"}]", List.class);
        System.out.println(list2.toString());
    }

Json本身很簡單,關(guān)鍵是得用起來,記住一點(diǎn),以后在做數(shù)據(jù)傳輸接口時,首先想到的一定要是Json,而不是xml。

源碼下載

[本工程詳細(xì)源碼]
(https://github.com/chykong/java_component/tree/master/chapter1_json)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評論 19 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,422評論 4 61
  • 1_JSON簡介 11:16 1. JSON 是什么 JSON,全稱是 JavaScript Object Not...
    小豌豆書吧閱讀 385評論 0 0
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,446評論 6 13
  • 某年某月某日,我見到了文森特,沒有落魄的胡須,沒有不羈的長發(fā),就只是個平淡如溫水的男人。 他是畫家,不畫女人的...
    七鹿呦呦閱讀 177評論 0 0

友情鏈接更多精彩內(nèi)容