我寫的 PHP 比任何其他語言都多,首先是作為 WordPress 外掛程式開發人員,後來在 Laravel 中建立 SaaS 後端,並且不斷出現一個小雜務,我厭倦了用手做。您有一個 JSON blob、一個配置樣本、一個 API 回應、一個固定裝置,您需要它作為原始程式碼中的 PHP 陣列。運行時未解碼,實際上以文字形式寫入檔案。手動重新輸入括號和箭頭的速度很慢,這正是工具應該做的機械翻譯。所以我內建了一個 工具。dev,這就是它的指南。
TL;DR: 工具 JSON 到 PHP 陣列轉換器 解析 JSON 文件並將其序列化為 PHP 陣列文字,您可以直接貼上到文件中。 JSON 物件變成關聯數組
=>,JSON 陣列成為索引數組,標量映射到其 PHP 等效項。選擇短[]或者經典array()語法,設定縮進,並可選擇將結果包裝成 a$variable = [...];作業。它完全在客戶端運行:不上傳、不註冊、離線工作。
什麼是 JSON 到 PHP 陣列轉換器?
JSON 到 PHP 陣列轉換器將 JSON 文件轉換為等效的 PHP 陣列文字。 JSON 物件變成與 寫入的關聯數組 => 運算符,JSON 數組變成索引數組,標量類型直接對應:JSON 字串變成單引號 PHP 字串, true 和 false 保持原樣, null 留下來 null,數字保持其價值。巢狀保留到任何深度,因此深度結構的 JSON 物件會顯示為具有相同形狀的深度結構的 PHP 陣列。
這很有用的原因是 JSON 和 PHP 陣列描述了相同的東西,即鍵控和有序值的樹,具有不同的標點符號。 JSON 使用冒號和大括號; PHP 使用 => 和括號。它們之間的翻譯是純粹的力學,手動完成時力學很容易出錯,特別是對於嵌套結構,其中單個錯位的括號會破壞文件。轉換器確定性地進行翻譯並將有效的 PHP 交還給您。
值得明確的是,這不是什麼。不是 json_decode. PHP 在運行時可以很好地讀取 JSON,當您的資料以字串形式到達時,對其進行解碼是正確的舉動。當您希望數組駐留在原始程式碼本身中時,此工具適用於另一種情況。
為什麼不直接使用 json_decode?
這是每個 PHP 開發人員問的第一個問題,也是正確的問題。 json_decode($string, true) 將 JSON 字串解析為 PHP 數組,PHP 手冊將其記錄為使用 JSON 的標準方式。如果您的 JSON 是運行時到達的數據,則來自 HTTP 請求、佇列、您讀取的檔案 json_decode 這正是您應該使用的,並且附近沒有任何程式碼產生器。
此轉換器適用於不同的情況:當 JSON 不是運行時數據而是您想要提交程式碼的資料時。我自己工作的一些具體案例。預設配置數組,附帶插件,應該在來源中可讀和可編輯。查找表,例如國家代碼到名稱的映射,您貼上一次,永遠不會取得。測試夾具必須是文字,因此測試是獨立的,並且不依賴讀取文件。資料庫遷移的種子。文件中必須可複製貼上 PHP 而不是 JSON 的範例。
在所有這些中,在每個請求上解碼 JSON 字串都是浪費,並且會將資料隱藏在字串文字後面,其中編輯器無法折疊它,行踪無法檢查它,審閱者也無法將其讀取為 PHP。將數組寫入來源可以解決此問題。轉換器是從 JSON 樣本到該文字的最快方法。
這是一張表中的決定。
| 情況 | 使用 | 為什麼 |
|---|---|---|
| JSON 作為資料到達運行時 | json_decode($json, true) |
解析是一項工作;保持動態 |
| JSON 是配置、固定裝置、種子、範例 | JSON 到 PHP 陣列轉換器 | 將可讀文字提交來源 |
| 您需要從 PHP 值中恢復 JSON | json_encode($array) |
反向 |
你有一個 PHP serialize() 字串 |
取消序列化工具 | 這是一種完全不同的格式 |
短的差別是什麼 [] 和 array() 語法?
它們產生相同的數組;只有括號不同。使用短語法 [ 和 ] 自 PHP 5.4 起就已可用,PHP 5.4 現已成為古老的歷史,因此對於任何現代程式碼庫來說,短語法都是預設語法,也是我所追求的語法。經典的 array() 表單適用於有史以來發布的 PHP 的每個版本,這是仍然選擇它的唯一原因:您的目標是比 PHP 5.4 更舊的運行時,或其樣式指南強制要求長表單的程式碼庫。
該工具可讓您在它們之間切換,而無需重新貼上 JSON,因此如果您正在為舊項目做出貢獻,您可以一鍵匹配其 house 風格。我對任何新事物的建議都是短語法,而 PSR-12(現代 PHP 編碼風格)就是圍繞它編寫的。
字串和特殊字元如何處理?
這是咬住自己編寫快速轉換器的人的部分,因此值得解釋。該工具以 PHP 單引文字形式發出字串。在單引號內,PHP 幾乎按字面意思對待每個字元;唯一特別的兩個是反斜線和單引號本身。因此,轉換器恰好逃脫了這兩個,反斜線變成兩個反斜線,單引號得到前面的反斜線,並且它不理會其他一切。
這有一個令人愉快的結果。 JSON 字串內的換行符作為單引號 PHP 字串內的真正換行符出現,該換行符有效並準確地保留了字元。如果工具天真地嘗試應用雙引號轉義序列,您不會受到損壞。 JSON 字串類似 O'Brien 成為 'O\'Brien',以及 Windows 路徑,例如 C:\Users 成為 'C:\\Users',兩者都是正確的 PHP。如果您曾經偵錯過一個設定文件,其中值中的撇號默默地破壞了語法,您將很感激這是為您處理的。
如何使用轉換器?
流程分為四個步驟。將 JSON 物件或陣列貼到輸入框中;如果您想先查看輸出的形狀,請載入樣本。選擇數組語法,簡短 [] 或者 array()。 將縮排設定為 2 個空格、4 個空格或選項卡以符合您的項目,並可選擇鍵入變數名稱以將輸出包裝為 $config = [...]; 使用尾隨分號,準備放入檔案中。然後按一下"轉換"並複製結果。
如果 JSON 無效,該工具會報告解析器'自己的錯誤訊息而不是默默失敗,因此很快就會找到雜散尾隨逗號或不引用的密鑰。由於所有內容都在您的瀏覽器中運行,因此您可以在不離開電腦的情況下貼上真實的 API 回應或私有配置,當這些值不是您發送到隨機伺服器的值時,這很重要。該客戶端模型與網站其餘部分後面的模型相同,如中所述 資料隱私線上工具 指南。
這與其他 JSON 工具有何契合?
JSON 到 PHP 陣列轉換器是網站上 JSON 轉換器小系列的成員之一,它們共享相同的解析核心。當您想先整理 JSON 時, JSON 格式化程式 將縮排並驗證它。當您需要與 TypeScript 介面而不是 PHP 相同的資料時, JSON 到 TypeScript 轉換器 推斷類型。當目標是電子表格或資料庫載入時, JSON 到 CSV 轉換器 將其壓平成行,並且 JSON 到 YAML 轉換器 處理喜歡 YAML 的設定格式。
特別是對於 PHP 開發人員來說,值得了解的鄰居是 取消序列化工具,處理 PHP'自己的 serialize() 格式。這與 JSON 不同,JSON 是一種特定於 PHP 的有線格式,您可以在會話資料和一些 WordPress 選項值中找到,並且這兩個工具涵蓋了 PHP 專案中結構化資料通常顯示的兩種方式。如果您跨堆疊工作,則 web 開發人員工具包 綜述顯示了這些片段如何組合在一起,以及 開發人員生產力工具 指南涵蓋了更廣泛的範圍。
WordPress 和 Laravel 工作流程的工作範例
讓我用我擊中最多的兩個地方來具體化這一點。在 WordPress 外掛程式中,您經常會附帶一個預設設定數組,該數組會在啟動時播種選項表。在開發過程中,該結構經常以 JSON 樣本的形式開始生命,可以從設定 UI 匯出或在設計模式時勾勒出草圖。我沒有手動翻譯它,而是將 JSON 貼到轉換器中,選擇短語法和 4 空間縮排以匹配插件'風格、類型 defaults 作為變數名,然後返回 $defaults = [ ... ]; 這直接落入a get_default_settings() 功能。按鍵保持可讀性,審閱者可以在差異中看到形狀,並且每個頁面載入都沒有運行時解碼。
Laravel 方面類似,但顯示在 config 和 seeders 中。設定檔傳回一個大的關聯數組,我經常有一些第三方映射的 JSON 版本、貨幣表、一組特徵標誌、計劃列表,需要成為該數組。轉換器將 JSON 變成文字,我將其包裝在 return [ ... ]; 設定檔期望,該值現在是框架快取的一流 PHP config:cache 而不是從字串中解析。對於資料庫播種機,相同的技巧是:貼上樣本行的 JSON,取得數組,然後將其饋送到 insert().
我依靠轉換器而不是轉換器的原因 json_decode(file_get_contents(...)) 在這些地方並不是懶惰,而是提交文字使資料成為程式碼審查的一部分、靜態分析的一部分以及以人類讀取的形式出現的版本歷史的一部分。 PHP 連結器看不到程式碼旁邊的 JSON 檔案;來源中的陣列則不然。當資料是應用程式的固定部分而不是輸入到應用程式時,可見性值得一次性轉換。
還有一個文件角度,直到我開始編寫更多指南之前,我低估了。當您想在自述文件或知識庫中顯示 PHP 範例時,JSON blob 不是可複製貼上 PHP,抓取它的閱讀器會遇到語法錯誤。首先透過轉換器運行它意味著文件中的範例是真實的、可運行的 PHP,讀者可以將其放入文件中並查看工作,這是一個悄悄提高文件品質的小事。
值得了解的限制是什麼?
一些誠實的邊緣。最大的是數字精度,它是一般 JSON 解析的屬性,而不是專門解析這個工具。轉換器使用瀏覽器解析您的 JSON' JSON 解析器,它將數字表示為雙精度浮點數。整數超過大約 2 到 53 次方(十六位數),在工具看到它們之前在解析時失去精度。如果您使用非常大的整數 ID 轉換 JSON,請將它們視為 JSON 中的字串以保持它們準確。每個基於 JSON。parse 的轉換器都共享此限制;聲稱否則會說謊的工具。
其次,PHP數組密鑰強制。 PHP悄悄地將看起來像整數的字串密鑰轉換為實際的整數密鑰。轉換器將物件密鑰寫入引用的字串,這是明確且正確的,但請注意 PHP 本身可能會處理 '0' 和 0 作為運行時的相同鍵。這只適用於鍵為數字字串的對象,這種情況很少見,行為是 PHP's,而不是工具和#39;s。
第三,空容器。一個空的 JSON 物件 {} 還有一個空的 JSON 陣列 [] 兩者都成為 [] 在 PHP 中,因為 PHP 陣列無法區分兩者。這是映射中真正的歧義,而不是快捷方式,並且沒有 PHP 構造可以保留差異。
最後,輸出是一個值,而不是一個語句,除非您提供變數名稱。如果沒有一個,您將獲得一個裸露的文字,這就是您在貼上到現有表達式時想要的;如果有的話,您將獲得以分號結尾的完整分配。變數名稱已驗證,因此無效識別碼將被拒絕並發出明確的訊息,而不是產生損壞的 PHP。
常見問題
什麼是 JSON 到 PHP 陣列轉換器? JSON 到 PHP 陣列轉換器將 JSON 文件轉換為等效的 PHP 陣列文字。 JSON 物件成為與 => 的關聯數組;運算符,JSON 數組成為索引數組,標量類型映射到其 PHP 對應項,以便您可以將結果直接貼上到腳本中。
如何將 JSON 轉換為 PHP 陣列? 將 JSON 貼到輸入框中,選擇短 [] 或數組 () 語法和縮排樣式,然後按一下「轉換」。該工具會建立一個 PHP 數組文字,您可以複製該文字,如果您輸入變數名稱,則可以選擇將其包裝在變數賦值中。
短 [] 語法和數組 () 語法有什麼不同? 它們產生相同的數組;只有括號不同。短語法使用 [],並且自 PHP 5.4 起就可用,而數組 () 是適用於每個 PHP 版本的舊形式。僅當您必須支援早於 PHP 5.4 的運行時,才選擇數組。
這會取代 PHP 中的 json_decode 嗎? No。 json_decode($json,true)在運行時將 JSON 字串解析為數組,此時 JSON 作為資料到達。此工具將數組寫入原始程式碼,這適合配置、固定裝置、種子資料和範例,這些範例應駐留在檔案中,而不是在每個請求時進行解碼。
JSON 物件和陣列是如何對應的? JSON 物件變成 PHP 關聯數組,其中每個鍵都是一個單引號字串,後面跟著 =>及其值。 JSON 數組變成索引 PHP 數組,元素依序排列。嵌套保留到與來源完全相同的任何深度。
字串和特殊字元如何處理? 字串以 PHP 單引號文字形式發出,因此只有反斜線和單引號才能透過前面的反斜線轉義。所有其他字符,包括真正的換行符,都逐字保留,這與 PHP 處理單引號字串的方式相符。
我的 json 上傳到任何地方了嗎? 不。轉換完全在您的瀏覽器中使用裝置上的 JavaScript 進行。您的 JSON 永遠不會上傳、記錄或存儲,並且一旦頁面加載,該工具將繼續工作,網路將斷開連接。
JSON 到 PHP 陣列轉換器免費嗎? 是的。它是完全免費的,沒有註冊,沒有浮水印,也沒有使用上限。根據個人或商業專案的需要,將盡可能多的 JSON 文件轉換為 PHP 陣列。



