IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Json_decode retourne null


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut Json_decode retourne null
    Bonjour,

    Mon problème : json_decode retourne null.
    J'ai vu cette question de nombreuses fois sur internet mais je ne trouve pas de solution à mon problème pour autant.
    Merci de bien vouloir m'aider.

    Le code est simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      <?php
            [...]
             $fichier = CheminAsset($hash,$dir);  // $fichier est une adresse où charger une chaîne à décoder.
      	 $json = file_get_contents($fichier);    
             $result =  json_decode($json ,true );
     
             var_dump($result);
             if(json_last_error() == JSON_ERROR_SYNTAX ) echo "  JSON_ERROR_SYNTAX";
      ?>
    La chaîne JSON est assez longue, je l'ai mise dans un pastebin ici : https://pastebin.com/L9x5VaBb
    Mais, je peux l'ajouter ici si nécessaire.
    Je l'ai vérifiée sur un site en ligne (https://jsonformatter.curiousconcept.com/)

    Le code retourne NULL et il y a une erreur de syntax. J'ai beau chercher, je ne vois pas.

    Une idée ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 321
    Points : 642
    Points
    642
    Par défaut
    Bonjour,

    La fonction file_get_contents retourne bien le contenu json attendu ?

    Peut-être essayer d'utiliser la fonction json_last_error_msg() pour voir le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = json_decode($json, true);
    echo 'Last error: ', json_last_error_msg();

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Quel et le format du fichier ? utf-8 sans BOM .
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 757
    Points : 2 992
    Points
    2 992
    Par défaut
    Attention tu présumes que file_get_contents a fonctionné car, en effet, tu ne contrôles pas le retour. Si c'est false c'est qu'il y a un souci.

    En programmant en strict_mode, tu aurais reçu une erreur puisque ta variable retour peut être soit un boolean soit un string.

    Boolean est donc synonyme de souci.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  5. #5
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Merci pour la réponse !

    Pardon, je corrigeais mon message. Justement, j'ai utilisé json_last_error() qui retroune 4, donc une erreur de syntaxe dans JSON.
    Pourtant le site où j'ai vérifié la chaîne JSON semble dire que c'est OK. Je ne vois vraiment pas quoi faire.

  6. #6
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Quel et le format du fichier ? utf-8 sans BOM .
    C'est la question piège.

    Le fichier vient du dossier qui contient tous les assets d'un simulateurs OpenSimulator. Je ne sais pas quel format il a.

    J'ai utilisé les flags JSON_INVALID_UTF8_IGNORE puis JSON_INVALID_UTF8_SUBSTITUTE mais, ça n'a rien donné.

    L'encodage de la base de données est utf8mb4_0900_ai_ci

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    BOM ... tu as du rater ma réponse précédente ....
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    Attention tu présumes que file_get_contents a fonctionné car, en effet, tu ne contrôles pas le retour. Si c'est false c'est qu'il y a un souci.

    En programmant en strict_mode, tu aurais reçu une erreur puisque ta variable retour peut être soit un boolean soit un string.

    Boolean est donc synonyme de souci.
    Oui , il faut que je corrige cela.

    La fonction m'envoie une réponse puisque j'ai une chaîne JSON. C'est le traitement par json_decode qui , pour le moment pose problème et sans doute la syntaxe de la chaîne JSON.

    MAis, où est l'erreur ? Mystère.

  9. #9
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    BOM ... tu as du rater ma réponse précédente ....
    Et d'où viendrait le problème ? Que dois-je faire ?

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    vérifie le format de ton fichier ...
    lors de la sauvegarde de ton json il faut l'enregistrer en utf-8 sans BOM ...

    Sinon retire l BOM du fichier : https://www.sitepoint.com/community/...emove-bom/3183
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Alors j'ai cherché pour trouver le format du fichier utf-8 sans BOM, je ne sais pas comment faire.

    Sinon, j'ai essayé d'appliquer à ma chaîne JSON ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      $contenu = file_get_contents($fichier);
      if($contenu !== false)
      {
          $json = trim($contenu, "\\xef\\xbb\\xbf");
      }
    json_decode me retourne toujours null.

  12. #12
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    J'ai testé le JSON que tu as fourni et je le décode correctement.
    Cela signifie qu'il y a forcément un problème de ton côté sur l'obtention de la data (ou alors tu ne récupères pas ce que tu crois).
    => Teste correctement au lieu de jouer aux devinettes

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    {
       "absorption_config":[
          {
             "constant_term":"r0",
             "exp_scale":"r0",
             "exp_term":"r0",
             "linear_term":"r0",
             "width":"r25000"
          },
          {
             "constant_term":"r1",
             "exp_scale":"r0",
             "exp_term":"r0",
             "linear_term":"r0",
             "width":"r0"
          }
       ],
       "bloom_id":"u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef",
       "cloud_color":[
          "r0.449219",
          "r0.449219",
          "r0.449219"
       ],
       "cloud_id":"u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b",
       "cloud_pos_density1":[
          "r0.5",
          "r0.5",
          "r0.3036"
       ],
       "cloud_pos_density2":[
          "r0.5",
          "r0.5",
          "r0.14"
       ],
       "cloud_scale":"r0.33",
       "cloud_scroll_rate":[
          "r0.4994",
          "r0.0109997"
       ],
       "cloud_shadow":"r0.41",
       "cloud_variance":"r0",
       "dome_offset":"r0.96",
       "dome_radius":"r15000",
       "droplet_radius":"r800",
       "gamma":"r0.79",
       "glow":[
          "r38.4",
          "r0.001",
          "r-0"
       ],
       "halo_id":"u12149143-f599-91a7-77ac-b52a3c0f59cd",
       "ice_level":"r0",
       "legacy_haze":{
          "ambient":[
             "r1.13672",
             "r1.13672",
             "r1.13672"
          ],
          "blue_density":[
             "r0.0627451",
             "r1.05882",
             "r1.74902"
          ],
          "blue_horizon":[
             "r0.156863",
             "r0.305882",
             "r0.360784"
          ],
          "density_multiplier":"r4.51e-05",
          "distance_multiplier":"r7.5",
          "haze_density":"r0.76",
          "haze_horizon":"r0.28"
       },
       "max_y":"r4519",
       "mie_config":[
          {
             "anisotropy":"r0.8",
             "constant_term":"r0",
             "exp_scale":"r-0.000833333",
             "exp_term":"r1",
             "linear_term":"r0",
             "width":"r0"
          }
       ],
       "moisture_level":"r0",
       "moon_brightness":"r0.5",
       "moon_id":"ud07f6eed-b96a-47cd-b51d-400ad4a1c428",
       "moon_rotation":[
          "r0",
          "r0.354298",
          "r-3.50083e-08",
          "r0.935132"
       ],
       "moon_scale":"r1",
       "name":"(SS) Atmos 15 00 1",
       "planet_radius":"r6360",
       "rainbow_id":"u11b4c57c-56b3-04ed-1f82-2004363882e4",
       "rayleigh_config":[
          {
             "constant_term":"r0",
             "exp_scale":"r-0.000125",
             "exp_term":"r1",
             "linear_term":"r0",
             "width":"r0"
          }
       ],
       "sky_bottom_radius":"r6360",
       "sky_top_radius":"r6420",
       "star_brightness":"r0",
       "sun_arc_radians":"r0.00045",
       "sun_id":"u00000000-0000-0000-0000-000000000000",
       "sun_rotation":[
          "r0",
          "r-0.935132",
          "r1.84801e-07",
          "r0.354298"
       ],
       "sun_scale":"r1",
       "sunlight_color":[
          "r0.623529",
          "r0.541176",
          "r0.764706",
          "r0.254902"
       ],
       "type":"sky"
    }

    Qu'affiche ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $data = file_get_contents('data.json');
    var_dump($data);
    $data = json_decode($data);
    var_dump($data);
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  13. #13
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par Séb. Voir le message

    Qu'affiche ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $data = file_get_contents('data.json');
    var_dump($data);
    $data = json_decode($data);
    var_dump($data);
    Ce que j'ai posté dans le pastebin est le résultat que j'obtiens sur le site https://jsonformatter.curiousconcept.com/# quand je vérifie ma chaîne JSON. Je l'ai copié collé depuis le site.

    Quand je charge le contenu du fichier j'obtiens une chaîne qui n'est pas valide, je dois remplacer les simples quotes par des doubles quotes et ajouter des quôtes où il n'y en a pas. Au final, la chaîne est valide.... il y a des centaines de chaînes dans le dossier donc je dois automatiser le truc.

    Ceci pour expliquer les résultats obtenus et les différences entres les deux premiers var-dump:

    $data = file_get_contents($contenu-du-fichier);,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string(1721) " {'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0,r0,r0],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.3224,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.5,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.58,'glow':[r10.4,r0.001,r-0],'halo_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'ice_level':r0,'legacy_haze':{'ambient':[r0.269531,r0.269531,r0.269531],'blue_density':[r1.85882,r1.78824,r1.86667],'blue_horizon':[r0.0627451,r0.054902,r0.0627451],'density_multiplier':r4.51e-05,'distance_multiplier':r7.5,'haze_density':r0.79,'haze_horizon':r0.28},'max_y':r10000,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r-0.707107,r7.37163e-16,r0.707107],'moon_scale':r1,'name':'(SS) Atmos 00:00 2','planet_radius':r6360,'rainbow_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r1875,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r0.707107,r-1.47433e-15,r0.707107],'sun_scale':r1,'sunlight_color':[r0.423529,r0.282353,r0.447059,r0.14902],'type':'sky'}"
    Une fois la chaîne corrigée j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string(1889) " {"absorption_config":[{"constant_term":"r0","exp_scale":"r0","exp_term":"r0","linear_term":"r0","width":"r25000"},{"constant_term":"r1","exp_scale":"r0","exp_term":"r0","linear_term":"r0","width":"r0"}],"bloom_id":"u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef","cloud_color":["r0","r0","r0"],"cloud_id":"u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b","cloud_pos_density1":["r0.5","r0.5","r0.3036"],"cloud_pos_density2":["r0.5","r0.5","r0.125"],"cloud_scale":"r0.3224","cloud_scroll_rate":["r0.4994","r0.0109997"],"cloud_shadow":"r0.5","cloud_variance":"r0","dome_offset":"r0.96","dome_radius":"r15000","droplet_radius":"r800","gamma":"r0.58","glow":["r10.4","r0.001","r-0"],"halo_id":"u12149143-f599-91a7-77ac-b52a3c0f59cd","ice_level":"r0","legacy_haze":{"ambient":["r0.269531","r0.269531","r0.269531"],"blue_density":["r1.85882","r1.78824","r1.86667"],"blue_horizon":["r0.0627451","r0.054902","r0.0627451"],"density_multiplier":"r4.51e-05","distance_multiplier":"r7.5","haze_density":"r0.79","haze_horizon":"r0.28"},"max_y":"r10000","mie_config":[{"anisotropy":"r0.8","constant_term":"r0","exp_scale":"r-0.000833333","exp_term":"r1","linear_term":"r0","width":"r0"}],"moisture_level":"r0","moon_brightness":"r0.5","moon_id":"ud07f6eed-b96a-47cd-b51d-400ad4a1c428","moon_rotation":["r0","r-0.707107","r7.37163e-16","r0.707107"],"moon_scale":"r1","name":"(SS) Atmos 00 00 2","planet_radius":"r6360","rainbow_id":"u11b4c57c-56b3-04ed-1f82-2004363882e4","rayleigh_config":[{"constant_term":"r0","exp_scale":"r-0.000125","exp_term":"r1","linear_term":"r0","width":"r0"}],"sky_bottom_radius":"r6360","sky_top_radius":"r6420","star_brightness":"r1875","sun_arc_radians":"r0.00045","sun_id":"u00000000-0000-0000-0000-000000000000","sun_rotation":["r0","r0.707107","r-1.47433e-15","r0.707107"],"sun_scale":"r1","sunlight_color":["r0.423529","r0.282353","r0.447059","r0.14902"],"type":"sky"}"
    Et pour finir $data = json_decode($data); renvoie NULL.

  14. #14
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string(1721) " {'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0,r0,r0],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.3224,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.5,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.58,'glow':[r10.4,r0.001,r-0],'halo_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'ice_level':r0,'legacy_haze':{'ambient':[r0.269531,r0.269531,r0.269531],'blue_density':[r1.85882,r1.78824,r1.86667],'blue_horizon':[r0.0627451,r0.054902,r0.0627451],'density_multiplier':r4.51e-05,'distance_multiplier':r7.5,'haze_density':r0.79,'haze_horizon':r0.28},'max_y':r10000,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r-0.707107,r7.37163e-16,r0.707107],'moon_scale':r1,'name':'(SS) Atmos 00:00 2','planet_radius':r6360,'rainbow_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r1875,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r0.707107,r-1.47433e-15,r0.707107],'sun_scale':r1,'sunlight_color':[r0.423529,r0.282353,r0.447059,r0.14902],'type':'sky'}"
    Oh le petit cachotier Ce n'est pas du tout du JSON, en fait ça ressemble à rien que je connaisse. T'as pas moyen d'avoir des données dans un format bien connu et exploitable ? Si non, donne-nous au moins les billes pour reproduire le comportement de notre côté, sinon ça va être difficile de t'aider àmha.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  15. #15
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    J'ajoute que non, tu n'obtiens pas cela, car cette chaîne est valide (malgré l'espace au tout début qui ne gêne pas mais qui n'a rien à faire là).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $buffer = <<<BUFFER
        {"absorption_config":[{"constant_term":"r0","exp_scale":"r0","exp_term":"r0","linear_term":"r0","width":"r25000"},{"constant_term":"r1","exp_scale":"r0","exp_term":"r0","linear_term":"r0","width":"r0"}],"bloom_id":"u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef","cloud_color":["r0","r0","r0"],"cloud_id":"u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b","cloud_pos_density1":["r0.5","r0.5","r0.3036"],"cloud_pos_density2":["r0.5","r0.5","r0.125"],"cloud_scale":"r0.3224","cloud_scroll_rate":["r0.4994","r0.0109997"],"cloud_shadow":"r0.5","cloud_variance":"r0","dome_offset":"r0.96","dome_radius":"r15000","droplet_radius":"r800","gamma":"r0.58","glow":["r10.4","r0.001","r-0"],"halo_id":"u12149143-f599-91a7-77ac-b52a3c0f59cd","ice_level":"r0","legacy_haze":{"ambient":["r0.269531","r0.269531","r0.269531"],"blue_density":["r1.85882","r1.78824","r1.86667"],"blue_horizon":["r0.0627451","r0.054902","r0.0627451"],"density_multiplier":"r4.51e-05","distance_multiplier":"r7.5","haze_density":"r0.79","haze_horizon":"r0.28"},"max_y":"r10000","mie_config":[{"anisotropy":"r0.8","constant_term":"r0","exp_scale":"r-0.000833333","exp_term":"r1","linear_term":"r0","width":"r0"}],"moisture_level":"r0","moon_brightness":"r0.5","moon_id":"ud07f6eed-b96a-47cd-b51d-400ad4a1c428","moon_rotation":["r0","r-0.707107","r7.37163e-16","r0.707107"],"moon_scale":"r1","name":"(SS) Atmos 00 00 2","planet_radius":"r6360","rainbow_id":"u11b4c57c-56b3-04ed-1f82-2004363882e4","rayleigh_config":[{"constant_term":"r0","exp_scale":"r-0.000125","exp_term":"r1","linear_term":"r0","width":"r0"}],"sky_bottom_radius":"r6360","sky_top_radius":"r6420","star_brightness":"r1875","sun_arc_radians":"r0.00045","sun_id":"u00000000-0000-0000-0000-000000000000","sun_rotation":["r0","r0.707107","r-1.47433e-15","r0.707107"],"sun_scale":"r1","sunlight_color":["r0.423529","r0.282353","r0.447059","r0.14902"],"type":"sky"}
        BUFFER;
    print_r(json_decode($buffer));
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    stdClass Object
    (
        [absorption_config] => Array
            (
                [0] => stdClass Object
                    (
                        [constant_term] => r0
                        [exp_scale] => r0
                        [exp_term] => r0
                        [linear_term] => r0
                        [width] => r25000
                    )
     
                [1] => stdClass Object
                    (
                        [constant_term] => r1
                        [exp_scale] => r0
                        [exp_term] => r0
                        [linear_term] => r0
                        [width] => r0
                    )
     
            )
     
        [bloom_id] => u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef
        [cloud_color] => Array
            (
                [0] => r0
                [1] => r0
                [2] => r0
            )
     
        [cloud_id] => u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b
        [cloud_pos_density1] => Array
            (
                [0] => r0.5
                [1] => r0.5
                [2] => r0.3036
            )
     
        [cloud_pos_density2] => Array
            (
                [0] => r0.5
                [1] => r0.5
                [2] => r0.125
            )
     
        [cloud_scale] => r0.3224
        [cloud_scroll_rate] => Array
            (
                [0] => r0.4994
                [1] => r0.0109997
            )
     
        [cloud_shadow] => r0.5
        [cloud_variance] => r0
        [dome_offset] => r0.96
        [dome_radius] => r15000
        [droplet_radius] => r800
        [gamma] => r0.58
        [glow] => Array
            (
                [0] => r10.4
                [1] => r0.001
                [2] => r-0
            )
     
        [halo_id] => u12149143-f599-91a7-77ac-b52a3c0f59cd
        [ice_level] => r0
        [legacy_haze] => stdClass Object
            (
                [ambient] => Array
                    (
                        [0] => r0.269531
                        [1] => r0.269531
                        [2] => r0.269531
                    )
     
                [blue_density] => Array
                    (
                        [0] => r1.85882
                        [1] => r1.78824
                        [2] => r1.86667
                    )
     
                [blue_horizon] => Array
                    (
                        [0] => r0.0627451
                        [1] => r0.054902
                        [2] => r0.0627451
                    )
     
                [density_multiplier] => r4.51e-05
                [distance_multiplier] => r7.5
                [haze_density] => r0.79
                [haze_horizon] => r0.28
            )
     
        [max_y] => r10000
        [mie_config] => Array
            (
                [0] => stdClass Object
                    (
                        [anisotropy] => r0.8
                        [constant_term] => r0
                        [exp_scale] => r-0.000833333
                        [exp_term] => r1
                        [linear_term] => r0
                        [width] => r0
                    )
     
            )
     
        [moisture_level] => r0
        [moon_brightness] => r0.5
        [moon_id] => ud07f6eed-b96a-47cd-b51d-400ad4a1c428
        [moon_rotation] => Array
            (
                [0] => r0
                [1] => r-0.707107
                [2] => r7.37163e-16
                [3] => r0.707107
            )
     
        [moon_scale] => r1
        [name] => (SS) Atmos 00 00 2
        [planet_radius] => r6360
        [rainbow_id] => u11b4c57c-56b3-04ed-1f82-2004363882e4
        [rayleigh_config] => Array
            (
                [0] => stdClass Object
                    (
                        [constant_term] => r0
                        [exp_scale] => r-0.000125
                        [exp_term] => r1
                        [linear_term] => r0
                        [width] => r0
                    )
     
            )
     
        [sky_bottom_radius] => r6360
        [sky_top_radius] => r6420
        [star_brightness] => r1875
        [sun_arc_radians] => r0.00045
        [sun_id] => u00000000-0000-0000-0000-000000000000
        [sun_rotation] => Array
            (
                [0] => r0
                [1] => r0.707107
                [2] => r-1.47433e-15
                [3] => r0.707107
            )
     
        [sun_scale] => r1
        [sunlight_color] => Array
            (
                [0] => r0.423529
                [1] => r0.282353
                [2] => r0.447059
                [3] => r0.14902
            )
     
        [type] => sky
    )
    Nettoie bien le début de chaîne pour être sûr que rien de bizarre ne traine (cela pourrait être faussé lors du copier-coller sur le forum).

    Tu peux coller le brut obtenu ici => https://hexed.it/
    Cela permet de voir facilement quels octets sont présents

    Attention, avec trim() les octets que tu spécifies remplacent ceux présents par défaut => Cela peut fausser le résultat attendu si tu as un mix de caractères anormaux
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  16. #16
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par Séb. Voir le message
    T'as pas moyen d'avoir des données dans un format bien connu et exploitable ? Si non, donne-nous au moins les billes pour reproduire le comportement de notre côté, sinon ça va être difficile de t'aider àmha.
    Ben, je ne voulais pas reconter ma vie et je pensais que la solution serait simple ...

    Donc je raconte ma vie :

    En fait, je n'ai que ces données. J'ai une grille de monde virtuels OpenSimulator. Les inventaires de certains utilisateurs commencent à devenir imposants et le navigateur 3D (firestorm) n' est vraiment pas pratique pour faire du tri.

    Je suis en train d'écrire un outil pour faire du rangement sur une page web.

    OpenSim utilise une base de données mais les items de l'inventaire (textures, objets 3D, sons, notecard, repères, paramètres d'environnement, etc.) sont stockés dans un dossier et des sous dossiers. Le nom des sous dossiers sont définis à partir du hash de l'item ( exemple 0E/F1/AB/CD12/ ) et j'obtiens comme cela l'adresse du fichier que je dois décompresser et traiter différemment en fonction du type d'item. Ce qui est plus ou moins compliqué.

    Là ce qui m'intéresse c'est les paramètres d'environnements et j'étais toute contente de pouvoir les traiter en un clique en générant un tableau à partir d'un fichier JSON.... qui n'existe pas, apparemment.

    Je vais devoir me faire une p'tite routine, j'avais imaginé pouvoir modifier le ciel, le soleil et la mer ... et l'éclairage, depuis une page web... magique quoi.

    Voilà.

    Mais la chaîne ressemble quand même pas mal à une chaîne JSON non ? Pas de moyens d'arriver à mes fins ?

    Ent tout cas merci pour l'aide !
    Je rapsse demain... bonne soirée.

  17. #17
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par acryline Voir le message
    Je vais devoir me faire une p'tite routine, j'avais imaginé pouvoir modifier le ciel, le soleil et la mer ... et l'éclairage, depuis une page web... magique quoi.
    non, pas "magique" mais "informatique" ;-). si vous arrivez à lire et écrire ces fichiers avec php, vous arriverez surement à faire les fonctionnalités que vous recherchez.

    Citation Envoyé par acryline Voir le message
    Mais la chaîne ressemble quand même pas mal à une chaîne JSON non ? Pas de moyens d'arriver à mes fins ?
    comme le disait Séb dans son message de 19 h 39, l'exemple de chaine que vous nous montrez avec les " est du json valide qui est analysable en php.
    essayez son code de son message là et dit nous le résultat que vous obtenez :
    https://www.developpez.net/forums/d2.../#post11971244

  18. #18
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par acryline Voir le message
    Mais la chaîne ressemble quand même pas mal à une chaîne JSON non ? Pas de moyens d'arriver à mes fins ?
    Je pense que t'es pas loin, juste que tu ne fais pas les bonnes vérifs pour identifier précisément où ça bloque.
    Vérifie pas à pas les octets sur de petits fichiers.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  19. #19
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ça ressemble à du JSON5 (possibilité d'utiliser les simples quotes, quotes facultatives). Ça pourrait être le format de stockage de SQLite ou autre base de données (en tout cas je vois mal un projet comme OpenSimulator se faire un petit format propriétaire). Si c'est le cas, le top serait de se connecter directement à cette base de données.

    Je pense que tes problèmes viennent d'une erreur dans le remplacement pour tenter d'obtenir du JSON. Tu peux essayer ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $input = file_get_contents('ton_fichier_non_modifié');
     
    $pattern = <<<'REGEX'
    ~
    (?| 
        ' ( [^'\\]* (?:\\. [^'\\]* )* ) '
      |
        ( [^][}{,:\s]+ )
    )
    ~x
    REGEX;
     
    $trans = ['\\\\' => '\\\\', '\\"' => '\\"', '"' => '\\"', "\\'" => "'"];
     
    $json = preg_replace_callback(
        $pattern,
        fn($m) => '"' . strtr($m[1], $trans) . '"',
        $input
    );
     
    print_r(json_decode($json, true));
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  20. #20
    Membre régulier Avatar de acryline
    Profil pro
    Inscrit en
    Août 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 200
    Points : 101
    Points
    101
    Par défaut
    Bonjour

    Merci pour vos réponses. Très sympa de vous intéresser à mon cas.

    Je ne suis pas développeuse professionnelle et je ce matin je suis un peu perplexe quand je découvre ce genre de syntaxe : <<<BUFFER ... BUFFER; ou <<<REGEX ... REGEX;

    J’ai essayé les codes proposés, mais j’obtiens des erreurs, je dois mal m’y prendre.
    Mes recherches sur internet me renvoient toujours aux opérateurs du PHP. Je découvre.
    C’est bien, j’apprends en revanche, cela ajoute à mes difficultés. Je vais simplifier.

    Citation Envoyé par Séb. Voir le message
    Je pense que t'es pas loin, juste que tu ne fais pas les bonnes vérifs pour identifier précisément où ça bloque.
    Vérifie pas à pas les octets sur de petits fichiers.
    Je crois que je vais faire ça, prendre des petits bouts d’une des chaînes que j’obtiens depuis les données stockées et transformées avec les doubles quotes puis, les tester dans un petit code tout simple.

    Citation Envoyé par CosmoKnacki Voir le message
    le top serait de se connecter directement à cette base de données.
    La base de données est sur mon serveur, mais elle ne contient pas les données, elle enregistre simplement le hash des l’items des inventaires, ce qui permet d’aller chercher les infos dans le dossier et sous-dossiers comme je l’ai expliqué un peu plus haut.
    Fonction que j'utilise pour trouver l'adresse du fichier d'un item :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     function CheminAsset($hash,$dir)
     {
         $dos1 = substr($hash,0,2);
         $dos2 = substr($hash,2,2);
         $dos3 = substr($hash,4,2);
         $dos4 = substr($hash, 6,4);
         $dir .=$dos1.'/'.$dos2.'/'.$dos3.'/'.$dos4.'/'.$hash;
         return $dir; 
     }
    Sinon, merci pour le REGEX, quand j’aurai compris la syntaxe je vais l’utiliser, c’est beaucoup plus propre que ce que j’ai fait.

    Citation Envoyé par mathieu Voir le message
    non, pas "magique" mais "informatique"
    Tout à fait d’accord avec ça. Ce qui serait magique, serait que je puisse le faire.

    Allez au boulot … je vous tiens au courant et encore merci !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Des sites Microsoft indisponibles depuis des heures
    Par Stéphane le calme dans le forum Actualités
    Réponses: 13
    Dernier message: 23/11/2013, 12h15
  2. lien mort depuis des pages qui n'ont pas ce lien
    Par zuger dans le forum Apache
    Réponses: 1
    Dernier message: 27/09/2012, 18h42
  3. Appli visible dans la barre des taches mais ne s’ouvre pas.
    Par Pascal Lob dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 23/10/2010, 11h38
  4. With // Je cherche mais ne trouve pas
    Par cm16 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 10/05/2007, 20h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo