我從一個API中獲得了原始數據,其中包含一個JSON,我試圖從返回的數據中裁剪出只有JSON的部分。我使用了php的strpos()函數編寫了一個函數來裁剪JSON,從開始(左大括號的位置)到結束(右大括號的位置)。
但是我遇到了一個問題,資料的某些值也包含特殊字符,包括分號,這使得函數無法完全裁剪...
請問有沒有更好的方法來解決這個問題?
一些資料的範例:
$data = { "name" : "Full Name", "DisplayName":"St Philip\u0026#39;", "grade" : "grade", "percentage" : 10, {"EventName":"Event Name","maxErrors":10} };
這是我寫的函數:
function copyData($data, $param1, $param2) { $start = strpos($data, $param1) + strlen($param1); $end = strpos($data, $param2, $start); $return = substr($data, $start, $end - $start); return $return; }
所以,使用這個函數,它總是在DisplayName處停止...
P粉5981402942023-09-22 00:33:25
您的$data似乎是一個格式錯誤的JSON字串。
如果這是由於錯誤的輸入導致的,並且$data是一個正常的JSON字串,那麼我建議您改變策略。
假設正確的JSON字串是:
$data = '{ "name":"Full Name", "DisplayName":"St Philip\u0026#39;", "grade":"grade", "percentage":10, "event":{ "EventName":"Event Name", "maxErrors":10 } }';
然後您可以將JSON轉換為普通的PHP數組並存取其鍵:
$decodedData = json_decode ($data, true); echo $decodedData['DisplayName'];
資料結果是一個URL編碼的字串:
如果您需要一個非URL編碼的字串,只需新增轉換:
echo htmlspecialchars_decode($decoded['DisplayName']);
您將獲得: