我有来自 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 处..
您的 $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']);
您将获得:
圣菲利普