我从一个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']);
您将获得: