簡體   English   中英

從鍵上的json_encoded字符串中刪除雙引號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM