Fonction json_encode en PHP


Fonction json_encode en PHP

Messagepar dommarion » 09 Oct 2022 16:16

Bonjour,
Nous disposons de la fonction de transformation d'une chaîne JSON en tableau: json_decode php avec une fonction construite par la teams eedomus.
Voir le lien pour le détail de la fonction en PHP:https://www.php.net/manual/fr/function.json-decode.php
Cette fonction est sdk_json_decode(), et ne nécessite pas de déclaration de fonction dans votre script car elle est déclarée en global par la team.
Voir la documentation pour le détail de la fonction:https://doc.eedomus.com/view/Scripts
sdk_json_decode($json, $decode_utf8 = false)
Retourne un tableau contenant le JSON décodé (Similaire à la fonction json_decode() de PHP
Passer $decode_utf8 à true si certains caractères sont invalides en sortie.


J'ai sollicité la teams pour inclure son inverse dans la box, c'est à dire transformer un tableau en chaîne JSON: json_encode().
Voir le lien pour le détail de la fonction en PHP: https://www.php.net/manual/fr/function.json-encode.php
Malheureusement, pour des raisons de rétrocompatibilité avec la box eedomus (vs eedomus+) il n'est pas possible de mettre cela en fonction globale dans pour la box.
Il faut déclarer une fonction dans vos scripts pour avoir ce résultat, je vous propose cette fonction sous le nom de sdk_json_encode() (le jour où la team la passera en global, alors il n'y aura qu'à supprimer la déclaration de votre fonction dans vos scripts :ugeek: ).
Je n'ai pas repris les flags qui sont nombreux, ni depth. Tout cela peut être amélioré plus tard.
Code : Tout sélectionner
// Fonction json_encode du PHP pour eedomus
function sdk_json_encode($val){
    if (is_string($val)) return '"'.addslashes($val).'"';
    if (is_numeric($val)) return $val;
    if ($val === null) return 'null';
    if ($val === true) return 'true';
    if ($val === false) return 'false';

    $assoc = false;
    $i = 0;
    foreach ($val as $k=>$v){
        if ($k !== $i++){
            $assoc = true;
            break;
        }
    }
    $res = array();
    foreach ($val as $k=>$v){
        $v = sdk_json_encode($v);
        if ($assoc){
            $k = '"'.addslashes($k).'"';
            $v = $k.':'.$v;
        }
        $res[] = $v;
    }
    $res = implode(',', $res);
    if ($assoc) {return '{'.$res.'}';}
    else {return '['.$res.']';}
}


Cela doit réspondre à plusieurs questions vues dans le forum. :D

Bon weekend à tous.
dommarion
OpenWeather|Phases soleil|HeatzyV2|Concaténateur|HP Yamaha|SomfyV3|Epson|Seuils n étages|Baie 2 vantaux|Deezer|Intégrale|Authorization Digest|TV Philips|SmartThings|fonction PHP|Tuya Smartlife|CozyTouch2|mySMS
dommarion
 
Messages : 581
Inscription : 28 Déc 2020

Retour vers Entraide programmation plugins

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)