Maison > Questions et réponses > le corps du texte
Je reçois des données brutes d'une API qui contient un JSON et j'essaie de supprimer la partie JSON uniquement des données renvoyées. J'ai utilisé la fonction strpos() de PHP pour écrire une fonction permettant de découper le JSON du début (la position de l'accolade ouvrante) à la fin (la position de l'accolade fermante).
Mais j'ai rencontré un problème, certaines valeurs des données contenaient également des caractères spéciaux, notamment des points-virgules, ce qui empêchait la fonction de recadrer complètement...
Existe-t-il une meilleure façon de résoudre ce problème ?
Exemple de quelques données :
$data = { "name" : "Full Name", "DisplayName":"St Philip\u0026#39;", "grade" : "grade", "percentage" : 10, {"EventName":"Event Name","maxErrors":10} };
C'est la fonction que j'ai écrite :
function copyData($data, $param1, $param2) { $start = strpos($data, $param1) + strlen($param1); $end = strpos($data, $param2, $start); $return = substr($data, $start, $end - $start); return $return; }
Donc, en utilisant cette fonction, cela s'arrête toujours à DisplayName...
P粉5981402942023-09-22 00:33:25
Votre $data semble être une chaîne JSON mal formée.
Si cela est dû à une mauvaise saisie et que $data est une chaîne JSON normale, alors je vous recommande de changer de stratégie.
En supposant que la chaîne JSON correcte est :
$data = '{ "name":"Full Name", "DisplayName":"St Philip\u0026#39;", "grade":"grade", "percentage":10, "event":{ "EventName":"Event Name", "maxErrors":10 } }';
Vous pouvez ensuite convertir le JSON en un tableau PHP normal et accéder à ses clés :
$decodedData = json_decode ($data, true); echo $decodedData['DisplayName'];
Le résultat des données est une chaîne codée en URL :
Si vous avez besoin d'une chaîne non codée en URL, ajoutez simplement la conversion :
echo htmlspecialchars_decode($decoded['DisplayName']);
Vous obtiendrez :