[英]Remove double-quotes from a json_encoded string on the keys
我有一個json_encoded數組,這很好。
我需要在函數調用返回json字符串的所有鍵上去除雙引號。
我將如何做到這一點並成功返回?
謝謝!
我道歉,這里是json代碼的片段:
{"start_date":"2011-01-01 09:00","end_date":"2011-01-01 10:00","text":"test"}
只是添加更多信息:
我將通過AJAX請求檢索JSON,因此如果它更容易,我對如何在javascript端執行此操作持開放態度。
按照anubhava的評論編輯
$str = '{"start_date":"2011-01-01 09:00","end_date":"2011-01-01 10:00","text":"test"}';
$str = preg_replace('/"([^"]+)"\s*:\s*/', '$1:', $str);
echo $str;
這肯定適用於上面的字符串,雖然可能有一些我沒有想到的邊緣情況,這不起作用。 這是否適合您的目的取決於字符串的格式和它包含的元素/值的靜態程度。
TL; DR:缺少引號是Chrome顯示它是JSON對象而不是字符串的方式。 確保你有Header('Content-Type:application / json; charset = UTF8'); 在PHP的AJAX響應中解決了真正的問題。
詳細信息:想要解決此問題的一個常見原因是在調試返回的AJAX數據的處理時發現了這種差異。
就我而言,我使用Chrome的調試工具看到了不同之處。 連接到舊系統后,Chrome成功后顯示根據調試器,響應中的鍵周圍沒有顯示引號。 這允許在不使用JSON.parse()調用的情況下立即將對象視為對象。 調試我的新AJAX目標,響應中顯示引號,變量是字符串而不是對象。
當我在外部測試AJAX響應時,我終於意識到真正的問題,看到遺留系統實際上DID在鍵周圍有引號。 這不是Chrome開發工具所展示的內容。 唯一的區別是遺留系統上有一個標題指定了內容類型。 我將此添加到新的(WordPress)系統,並且調用現在與原始腳本完全兼容,並且success函數可以將響應作為對象處理,而無需任何解析。 現在我可以在舊系統和新系統之間切換,除了目標URL之外沒有任何更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.