JSON 轉 HTML 表格轉換器會將一個 JSON 物件或一組物件陣列轉換成具有語意結構的表格,包含一個 thead、一行單一的標頭列,以及一個由資料列組成的 tbody,所有內容皆會針對 HTML 文字上下文進行跳脫,並且全部在本地瀏覽器中渲染。這個轉換器是一個具決定性、可直接複製的替代方案,無需手寫 JavaScript 迴圈呼叫 document.createElement 並指派 textContent,特別是當你需要將輸出用於文件、靜態頁面、電子郵件草稿或開發者交接,而不是用於即時執行階段的表格時。由於所有處理都在當前分頁中執行,此工具不會上傳你的資料、不會把你的輸入當作 JavaScript 來求值、不會呼叫 API,也不會用 innerHTML 注入產生的標記。這消除了手寫 JSON 轉表格程式碼中兩種常見的失敗模式:因把 JSON 鍵當作即時屬性名稱而產生的原型污染錯誤,以及因把值串接進原始 HTML 而產生的 XSS 風險。這個片段刻意保持精簡——沒有 CSS 類別、沒有行內樣式、沒有 caption、沒有 ID,也沒有推斷的資料屬性——因此取用該片段的頁面可以自行決定樣式與無障礙脈絡。
在貼上任何內容之前,請先使用 JSON 驗證器 驗證 JSON 結構,這樣你可以清楚看到哪些行與欄位會被當作剖析錯誤而拒絕。兩個工具共享相同的嚴格 RFC 8259 規範,而驗證器會在你進行轉換之前先提供結構診斷。

轉換器接受與拒絕的輸入形狀
這個轉換器刻意保持嚴格。註解、尾端逗號、undefined、NaN、Infinity、BigInt 字面值,以及 JavaScript 物件實字語法都會被拒絕,因為它們並非合法的 JSON,若接受它們會對同一個輸入產生兩種分歧的解讀。根值也很重要:表格需要具名的欄位,而原始型別的根值無法以穩定的方式提供這些欄位。
| 輸入形狀 | 是否接受? | 轉換器會產生什麼 |
|---|---|---|
| 一個 JSON 物件 | 是 | 單一標頭列與單一資料列 |
| 非空物件陣列 | 是 | 一個標頭列,加上陣列中每個成員各一個資料列 |
| 空陣列 | 否 | 拒絕:沒有紀錄就沒有欄位 |
| 包含原始型別的陣列 | 否 | 拒絕:每個成員都必須是物件 |
| 原始型別根值(字串、數字、布林值、null) | 否 | 拒絕:沒有穩定的欄位模型 |
| 帶有註解或尾端逗號的 JSON | 否 | 由嚴格剖析器拒絕 |
| 帶有重複鍵的 JSON | 接受 | 依標準 JSON 剖析規則合併重複項目;請勿依賴重複鍵作為資料 |
如果你的資料是單一原始型別或原始型別陣列,轉換就沒有有意義的目的地,轉換器會明確告訴你。請先把輸入轉換為物件,然後再執行一次。
在瀏覽器中將 JSON 轉換為 HTML 表格
當你想把 JSON 渲染成靜態、可直接貼上的表格片段,而不是在執行階段用 JavaScript 即時建構表格時,這是核心工作流程。
- 將一個嚴格的 JSON 物件,或一個非空物件陣列,貼到轉換器的輸入區域。
- 執行轉換並檢查合併後的欄位、缺失的儲存格、null 值、巢狀 JSON 文字,以及跳脫後的預覽。
- 確認第一列的鍵順序符合你的預期;後續紀錄只會貢獻先前未出現過的鍵,因此重新排序來源陣列會改變欄位順序。
- 從轉換器複製 HTML 片段。
- 在將要承載此表格的頁面中,加入目的地特定的 caption、任何必要的 CSS,以及周圍的文件脈絡(標題、引言段落、來源的連結)。
- 在真實瀏覽器中測試最終頁面,確認 <script> 或 <img onerror> 字串會以可見文字呈現而不會被執行,並檢查目的地的內容安全政策與無障礙要求。
如果你需要非 HTML 的目的地,相同的來源可以餵給相關的本地工具。CSV 轉 HTML 表格轉換器 在你的資料已經是逗號分隔時,能提供相同的輸出形狀;而當下游讀者預期使用試算表而非標記時,CSV 管線也可能是正確的選擇。
如何處理欄位、缺失的鍵與 null
欄位是依據第一次出現順序的自身可列舉鍵的聯集。第一筆紀錄所公開的鍵會先出現,而之後在任何紀錄中發現的新鍵會依序附加到右側。這種決定性很重要,因為替代方案——依字母順序排序鍵,或為每列重新排列欄位——會產生一個更難以樣式化、也更難以跨列閱讀的表格。
轉換器為儲存格區分三種狀態。紀錄上缺失的鍵會變成空白的 td,因為該屬性在物件上從未存在。明確的 JSON null 會變成字面文字 null,因此「缺少值」與「真正的 null」不會在無聲中塌縮成同一種輸出。字串保持字串,數字與布林值使用其 JSON 可讀的拼寫,而巢狀陣列或物件則會成為單一儲存格內的精簡 JSON 文字。因此這個片段永遠不會從巢狀陣列虛構出一個關聯式列數或笛卡兒積——巢狀資料是被呈現,而不是被展開。
如果目的地需要平坦化的列、經正規化的子表格、類似 address.city 的點號路徑欄位名稱,或每個巢狀項目各一列,請先依據明確的結構描述轉換資料後再貼上。這個轉換器刻意只是一個呈現步驟,而不是結構描述引擎,事前的轉換比事後重新剖析來得快。
跳脫與 React 預覽邊界
每個標頭與儲存格在被置入 th 或 td 標籤之間之前,都會先針對 HTML 文字上下文進行編碼。& 符號、小於符號、大於符號、雙引號與單引號都會被跳脫,因此像 <script>alert(1)</script> 這樣的值會以可見文字呈現,而不是變成一個標籤。這個跳脫符合 WHATWG HTML 語法規範 中的編碼規則,以及 OWASP XSS 預防速查表 中針對放入 HTML 主體文字內的不受信任內容所提供的指引。
頁面上的預覽增加了第二道邊界。React 預覽是使用原始儲存格值透過文位元組點建構,而不是用 innerHTML 注入產生的 HTML。這表示即使未來某個迴歸破壞了複製片段中的跳脫,預覽本身仍然會將字串以文字方式呈現。這兩層刻意是獨立的,因此複製步驟是在片段抵達其真正目的地之前再次驗證片段的地方,特別是當目的地的重新渲染或清理標記方式與瀏覽器不同時。
限制與當你超過限制時該怎麼做
這個轉換器會失敗而非截斷。確切的上限是固定的,如果超出任何一項,工具會拒絕產生部分輸出。
| 限制 | 上限 | 替代作法 |
|---|---|---|
| 輸入大小 | 500,000 字元 | 分割檔案或預先篩選你實際需要的紀錄 |
| 列數 | 10,000 | 對資料進行分頁、取樣,或改用伺服器端表格 |
| 欄位數 | 200 | 重新塑形為較少的欄位或拆成多個表格 |
| 輸出大小 | 5,000,000 字元 | 在轉換前先縮窄可見欄位 |
八個外部測試案例涵蓋了字串、數字、布林值、null、對 HTML 敏感的文字、引號、巢狀陣列以及不相交的物件鍵,因此轉換已經針對最常見的值形狀進行過檢查。如果你真實的資料遠超出這些測試案例,請先用 JSON 驗證器預先驗證,確認剖析器沒問題後再貼進來。
何時應在轉換前先處理 JSON
有兩種模式值得作為獨立步驟來做,而不是要求轉換器去猜測。首先,如果某些紀錄擁有需要自己獨立表格的深層巢狀子項,請自行建構那些經正規化的子陣列——轉換器依設計會將巢狀資料保留在一個儲存格內,而這個決定正是讓欄位模型保持決定性的關鍵。其次,如果你的來源文字中重複鍵是承載資訊的,請先重寫輸入。標準的 JSON 剖析會在產生表格之前先解析掉重複的成員名稱,因此轉換器無法保留它們,而把重複鍵當作資料也是一個脆弱的習慣。
對於需要對即時資料做出反應的執行階段、客戶端表格而言,這個工具是錯誤的層級:它產生的是靜態片段,而不是渲染器。當你需要反應式、排序或篩選功能時,請改用樣板步驟或一個小型框架元件。對於其他所有情境——文件頁面、發布說明表格、電子郵件草稿、靜態原型——把 JSON 貼進 JSON 轉 HTML 表格轉換器,複製片段,再加入你自己的 caption 與樣式,這是從資料到表格、不招致 XSS 風險的最短路徑。
如需更深入的了解,請參閱 輸出能否在沒有相依套件下編譯:JSON 轉 Rust。
如需更深入的了解,請參閱 在線上使用 JSON 轉 XML 是否安全?瀏覽器端指南。