序列化的不同格式:JSON、XML、TOML、CSON、YAML

前言

這篇文章參考于知乎,進行了一些總結。

正文

首先什么是序列化,數據序列化是從一個系統獲取一些信息,將其轉換為其它系統可以讀取的格式,然后將其傳遞給其它系統的過程。也就是可以讓不同系統“通信”。

序列化需要滿足兩個特點,一是易于人類讀寫,二是易于機器讀寫。但這兩點很難同時滿足,因為人類喜歡更具表現力的、松散的、靈活的格式標準,而機器傾向于被確切告知一切事情而且沒有二義性和細節的缺失。

有很多種序列化的格式,JSON、XML、TOML、CSON、YAML等,當然這些在傳輸的過程中還是要轉換成二進制的,它們只是兩個系統間通信的標準,能夠互相讀取。下面對它們分別進行簡單的說明。

XML

雖然易于人類閱讀和編寫,但 XML 過于冗長和啰嗦,包含很多不必要的語法。即使對計算機解析也是一個負擔,因為需要處理各種邊緣情況。如今除了 HTML/SVG 等特定場景,XML 在 Web 數據交換中的使用已經不多。

<book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date><description>An in-depth look at creating applications with XML.</description>
</book>

JSON

JSON 其簡潔的語法,不僅易于計算機解析,也相對人類可讀。并且允許表示所有基本數據類型,并且可以嵌套表示復雜的數據結構。如今幾乎所有編程語言都內置解析它的功能,幾乎用在了任何地方。

{"books": [{"id": "bk102","author": "Crockford, Douglas","title": "JavaScript: The Good Parts", "genre": "Computer","price": 29.99,"publish_date": "2008-05-01","description": "Unearthing the Excellence in JavaScript"}]
}

TOML

TOML 的語法類似 Windows 的 INI 文件,看起來比 JSON 更加緊湊。它引入了表擴展等語法糖使嵌套數據結構更容易表示。TOML也內置了日期時間等數據類型的支持。缺點是目前語言支持庫還比較欠缺,不過Rust是支持的。

[[books]]
id = 'bk101'
author = 'Crockford, Douglas'
title = 'JavaScript: The Good Parts'
genre = 'Computer'
price = 29.99
publish_date = 2008-05-01T00:00:00+00:00
description = 'Unearthing the Excellence in JavaScript'

CSON

CSON 本質上是去掉了 JSON 的大括號,使用縮進層級的語法變體。它來自于 CoffeeScript,目的是與 CoffeeScript 語言協同簡化編程。但這也注定了 CSON 只能在 CoffeeScript 環境使用,通用性不高。

books: [id: 'bk102'author: 'Crockford, Douglas'title: 'JavaScript: The Good Parts'genre: 'Computer'price: 29.99publish_date: '2008-05-01'description: 'Unearthing the Excellence in JavaScript'
]

YAML

YAML 綜合了 CSON 和 JSON 的優點,語法簡潔可讀,數據類型支持齊全,兼容 JSON 的同時增加了更多功能特性。大多數流行語言都提供了解析 YAML 的庫支持,因此 YAML 被看作未來主流的數據序列化格式。缺點是不同語言的 YAML 實現之間存在細微差異。

books:- id: bk102author: Crockford, Douglastitle: 'JavaScript: The Good Parts'genre: Computerprice: 29.99publish_date: !!str 2008-05-01description: Unearthing the Excellence in JavaScript

總結

總的來說,每種格式均有其獨特的側重點,根據不同的使用場景可以選擇不同的格式。JSON 簡潔通用,YAML 功能全面可讀性強,XML啰嗦但自描述能力強,TOML 緊湊易用但缺乏支持,CSON 則過于語言綁定。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11356.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11356.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11356.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JetPack Compose Navigation

1. 導入依賴 implementation("androidx.navigation:navigation-compose:2.7.7") 2.kotlin編譯版本升級 composeOptions {kotlinCompilerExtensionVersion "1.5.0"} 3.插件版本升級 // Top-level build file where you can add configuration options c…

學習筆記:IEEE 1003.13-2003【POSIX PSE51接口列表】

一、POSIX PSE51接口列表 根據IEEE 1003.13-2003&#xff0c;整理了POSIX PSE51接口API&#xff08;一共286個&#xff09;&#xff0c;每個API支持鏈接查看。 IEEE POSIX接口online搜索鏈接&#xff1a; The Open Group Base Specifications Issue 7, 2018 edition 詳細內…

【python】模塊與包

Python中的模塊和包是組織和管理代碼的重要工具。通過模塊和包&#xff0c;你可以更好地管理和重用你的代碼&#xff0c;使得代碼更加模塊化和可維護。 目錄 前言 正文 一、模塊 1、模塊的分類 1&#xff09;內置模塊 python解釋器中默認擁有的模塊可以直接使用&#xff08;…

用戶需求甄別和篩選的6大標準

產品經理日常經常接收到大量的需求&#xff0c;并不是所有的需求都需要開發&#xff0c;需要進行甄別和篩選&#xff0c;這樣有利于確保項目的成功、優化資源利用以及提高產品質量。 那么針對這些用戶需求進行甄別或篩選的評判標準是什么&#xff1f;需求篩選可以說是初步的需求…

代碼隨想錄-算法訓練營day31【貪心算法01:理論基礎、分發餅干、擺動序列、最大子序和】

代碼隨想錄-035期-算法訓練營【博客筆記匯總表】-CSDN博客 第八章 貪心算法 part01● 理論基礎 ● 455.分發餅干 ● 376. 擺動序列 ● 53. 最大子序和 貪心算法其實就是沒有什么規律可言&#xff0c;所以大家了解貪心算法 就了解它沒有規律的本質就夠了。 不用花心思去研究其…

C++牛客周賽題目分享(2)小紅叕戰小紫,小紅的數組移動,小紅的素數合并,小紅的子序列求和

目錄 ?編輯 1.前言 2.四道題目 1.小紅叕戰小紫 1.題目描述 2.輸入描述 3.輸出描述 4.示例 5.題解與思路 2.小紅的數組移動 1.題目描述 2.輸入描述 3.輸出描述 4.示例 5.題解與思路 3.小紅的素數合并 1.題目描述 2.輸入描述 3.輸出描述 4.示例 5.題解與思…

增強For循環執行順序探究

增強For循環執行順序探究 增強For循環基礎執行順序探討對于數組對于集合 經典示例數組示例集合示例&#xff08;ArrayList&#xff09; 注意事項結論 在Java編程中&#xff0c;增強型for循環&#xff08;也稱為“foreach”循環&#xff09;是一種簡潔而強大的迭代集合或數組元素…

super

super 一、理解 super.屬性&#xff1a;在子類中&#xff0c;調用父類非私有化的成員屬性 super.方法&#xff1a;在子類中&#xff0c;調用父類非私有化的成員方法 super()&#xff1a;在子類構造方法中調用父類非私有的構造方法 二、案例 需求&#xff1a;編寫中國人和日本人…

云原生新手和開源教育分論壇 01-Kubernetes 社區:從新手到影響者

2024年04月20日 上海KCD & Shanghai&#xff1a;https://community.cncf.io/events/details/cncf-kcd-shanghai-presents-kcd-shanghai-2024/視頻觀看&#xff1a;https://www.bilibili.com/video/BV1nD421T786/?spm_id_from333.999.0.0&vd_sourceae7b192be069682aabc…

【FreeRTOS 快速入門】-- 1、STM32工程移植FreeRTOS

目錄 一、新建STM32工程 為了示范完整的移植過程&#xff0c;我們從0開始&#xff0c;新建一個標準的STM32點燈工程。 &#xff08;本篇以CubeMX作示范&#xff0c;CubeIDE操作近同&#xff0c;可作對比參考&#xff09; 1、新建工程 選擇 芯片型號 新建工程 2、搜索芯片型號…

24年做抖音小店,你還停留在數據?別人都已經開始注重利潤了

大家好&#xff0c;我是電商笨笨熊 一件事情持續做&#xff0c;一個項目持續深耕&#xff0c;意義到底是什么&#xff1f; 這句話我常常說&#xff0c;但很多人似乎走偏了實際意義&#xff1b; 尤其對于新手來說&#xff0c;做抖音小店總是向往某某老玩家多么牛的數據&#…

程序員健康指南:運動,讓代碼更流暢

程序員健康指南&#xff1a;運動&#xff0c;讓代碼更流暢 程序員&#xff0c;一個與電腦相伴的群體&#xff0c;長時間的久坐和高強度的腦力勞動是他們的日常。然而&#xff0c;久坐不僅影響體態&#xff0c;更對心臟健康構成威脅。根據《歐洲心臟雜志》的研究&#xff0c;中…

第十三節 huggingface的trainner解讀與Demo

文章目錄 前言一、trainer和TrainingArguments訓練與預測完整Demo1、數據構建2、TrainingArguments構建3、Trainer初始化4、模型訓練5、模型推理6、完整demo代碼7、完整運行結果二、輔助函數1、yield返回內容2、迭代器中斷恢復迭代demo3、yield from結構4、torch.Generator()的…

【PPT技巧】ppt文件打開就是只讀模式,如何改為可編輯模式?

PPT文檔打開是只讀模式&#xff0c;如何改成可編輯文檔呢&#xff1f;這需要分幾種情況來說&#xff0c;所以今天將介紹幾種方法幫助PPT只讀文檔改為可編輯文檔。 方法一&#xff1a; 我們可以先查看一下文件屬性&#xff0c;屬性中有只讀屬性&#xff0c;當我們打開文檔之后帶…

C++入門——引用(2)

前言 上一節我們開始學習了C&#xff0c;并且對C有了初步的了解&#xff0c;這一節我們繼續學習C的基礎&#xff0c;那么廢話不多說&#xff0c;我們正式進入今天的學習 C中的引用 1.1引用的概念 引用不是新定義一個變量&#xff0c;而是給已存在變量取了一個別名&#xff0…

uniapp小程序:大盒子包裹小盒子但是都有點擊事件該如何區分?

在開發過程中我們會遇到這種情況&#xff0c;一個大盒子中包裹這一個小盒子&#xff0c;兩個盒子都有點擊事件&#xff0c;例如&#xff1a; 這個時候如果點擊評價有可能會點擊到它所在的大盒子&#xff0c;如果使用css中的z-index設置層級的話如果頁面的盒子多的話會混亂&…

Spring解決泛型擦除的思路不錯,現在它是我的了。

你好呀&#xff0c;我是浮生。 Spring 的事件監聽機制&#xff0c;不知道你有沒有用過&#xff0c;實際開發過程中用來進行代碼解耦簡直不要太爽。 但是我最近碰到了一個涉及到泛型的場景&#xff0c;常規套路下&#xff0c;在這個場景中使用該機制看起來會很傻&#xff0c;但…

15、FreeRTOS 軟件定時器

文章目錄 一、什么是定時器?1.1 定時器的理解1.2 軟件定時器的特性 二、 軟件定時器的上下文2.1 守護任務2.2 守護任務的調度2.3 回調函數 三、軟件定時器的函數3.1 創建3.2 刪除3.3 啟動/停止3.5 修改周期3.6 定時器ID 四、案例4.1 一般使用4.2 消除抖動 一、什么是定時器? …

怎么解決ModuleNotFoundError: No module named ‘httpx_sse‘

解決方案 pip install httpx_sseLooking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting httpx_sse Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-n…

Android 14.0 frameworks添加自定義服務

1.概述 在14.0的系統rom定制化產品開發中,對于提供系統接口來給app調用,來控制系統的某些功能,所以需要添加自定義服務也是常有功能,因此需要來在frameworks層中添加自定義系統服務的功能 2.frameworks添加自定義服務的核心類 frameworks\base\services\java\com\android…