JSON, XML 匯出入範例
本文是因應 data.gov.tw 政府資料開放平台今年目標是能納入各機關上架資料時的資料檢核,以及可以將表格式資料匯出成 JSON or XML 方便程式使用,因此先列出初步的標準。
這邊的匯入資料無法通過,不代表資料不乾淨,只是代表沒有被規則納入而已。
匯入
XML
- [B] 檢查開頭是否有「<?mso-application progid="Excel.Sheet"」
- 有,當作 Excel 處理,到 [X]
- 沒有,到 [C]
- [C] 檢查 root tag 是否為 KML
- [D] 從 root tag 出發往 children 掃,掃到 childNodes 數量不等於一後停止
- 如果 childNodes 全部的 tag name 都一樣,就進到 [E]
- 如果 tag name 有不同,就進到 [V]
- [E] 再檢查下一層的 childNodes ,如果數量都相同並且都是只有一層,並且 tag name 也相同,就視為表格型資料的 XML
- [S] 符合表格型資料,標記起來, nodeName 可以是欄位名
- [V] 無法判斷的 XML ,結束處理
- [W] 進到 KML 處理流程
- [X] 進到 excel 處理流程,不當作 XML 處理
- [Z] 標示為不合法 XML,需要警告
json
- [A] 檢查是否為合法 JSON
- 不是合法 JSON ,到 [Z]
- 是合法 JSON ,到 [B]
- [B] 看最外層的格式
- 是 array ,到 [C]
- 是 object ,到 [D]
- 其他,到 [Y]
- [C] 檢查 array 內的每一個 element
- 全部都是 array ,到 [E]
- 全部都是 object ,到 [F]
- 其他,到 [X]
- [D] 檢查是否有 type 這個 properties
- 沒有,進到 [X]
- 有,是 FeatureCollection(GeoJSON) ,進到 [V]
- [E] 檢查 array 內是否每個元素都是非 array, object 的值
- [F] 檢查是否每個 object 的 properties 的集合都相同,並且 value 都是非 array, object
- [S] 是二維陣列並且矩形的 array JSON ,可以匯出成 CSV
- [T] 是 properties 都相同的 array JSON ,可以匯出成 CSV
- [V] 確定是 GeoJSON ,也可以支援匯出 CSV
- [X] 標示為不認得的 JSON 格式
- [Y] 標示為不認得的最外層 JSON 格式,可能需要警告
- [Z] 標示為不合法 JSON ,需要警告
匯出
這邊匯出只針對已經確定「可匯出成CSV」的資料,這個範圍只有在原始資料的格式已經是表格性質的格式
XML
- <dataset>
- <col1>value1-1</col1><col2>value1-2</col2>
- </row>
- <col1>value2-1</col1><col2>value2-2</col2>
- </row>
- </dataset>
JSON
- [{"col1":"value1-1", "col2":"value1-2"}, {"col1":"value1-2","col2":"value2-2"}]