161 votes

PHP json_decode() retourne NULL avec un JSON apparemment valide ?

Cet objet JSON est stocké dans un fichier texte :

{
    "MySQL": {
        "Server": "(server)",
        "Username": "(user)",
        "Password": "(pwd)",
        "DatabaseName": "(dbname)"
    },
    "Ftp": {
        "Server": "(server)",
        "Username": "(user)",
        "Password": "(pwd)",
        "RootFolder": "(rf)"
    },
    "BasePath": "../../bin/",
    "NotesAppPath": "notas",
    "SearchAppPath": "buscar",
    "BaseUrl": "http:\/\/montemaiztusitio.com.ar",
    "InitialExtensions": [
        "nem.mysqlhandler",
        "nem.string",
        "nem.colour",
        "nem.filesystem",
        "nem.rss",
        "nem.date",
        "nem.template",
        "nem.media",
        "nem.measuring",
        "nem.weather",
        "nem.currency"
    ],
    "MediaPath": "media",
    "MediaGalleriesTable": "journal_media_galleries",
    "MediaTable": "journal_media",
    "Journal": {
        "AllowedAdFileFormats": [
            "flv:1",
            "jpg:2",
            "gif:3",
            "png:4",
            "swf:5"
        ],
        "AdColumnId": "3",
        "RSSLinkFormat": "%DOMAIN%\/notas\/%YEAR%-%MONTH%-%DAY%\/%TITLE%/",
        "FrontendLayout": "Flat",
        "AdPath": "ad",
        "SiteTitle": "Monte Maíz: Tu Sitio",
        "GlobalSiteDescription": "Periódico local de Monte Maíz.",
        "MoreInfoAt": "Más información aquí, en el Periódico local de Monte Maíz.",
        "TemplatePath": "templates",
        "WeatherSource": "accuweather:SAM|AR|AR005|MONTE MAIZ",
        "WeatherMeasureType": "1",
        "CurrencySource": "cotizacion-monedas:Dolar|Euro|Real",
        "TimesSingular": "vez",
        "TimesPlural": "veces"
    }
}

Lorsque j'essaie de le décoder avec json_decode() il renvoie NULL. Pourquoi ? Le fichier est lisible (j'ai essayé de faire un écho à file_get_contents() et cela a fonctionné correctement).

J'ai testé JSON contre http://jsonlint.com/ et c'est tout à fait valable.

Qu'est-ce qui ne va pas ?

1voto

Suman Deol Points 37

Donc, html_entity_decode() a fonctionné pour moi. Essayez ceci, s'il vous plaît.

$input = file_get_contents("php://input");
$input = html_entity_decode($input);
$event_json = json_decode($input,true);

1voto

NeoTechni Points 69

Il m'a fallu une heure pour comprendre, mais les virgules de fin (qui fonctionnent en JavaScript) échouent en PHP.
C'est ce qui a réglé le problème pour moi :

str_replace([PHP_EOL, ",}"], ["", "}"], $JSON);

1voto

user419685 Points 11

Je recommande de créer un fichier .json (ex : config.json). Ensuite, collez tous vos objets json et format il. Vous pourrez ainsi supprimer toutes les choses qui cassent votre objet json, et obtenir un objet json copié-collé propre.

1voto

Ashish Sondagar Points 418
  • Je suis également confronté au même problème...
  • Je procède comme suit... 1) J'imprime cette variable dans le navigateur 2) Je valide les données de cette variable par franc-maçon 3) copier/référencer ces données dans le cadre d'un traitement ultérieur
  • après cela, je n'ai pas eu de problème.

0voto

Hassan Saeed Points 1213

vous devez veiller à ce que les points suivants soient respectés

1. votre chaîne json n'a pas de caractères inconnus

2. La chaîne json peut être visualisée à partir d'un visualiseur json en ligne (vous pouvez rechercher sur Google un visualiseur en ligne ou un analyseur pour json) et devrait s'afficher sans aucune erreur.

3. Votre chaîne n'a pas d'entités html, elle devrait être en texte simple/chaîne de caractères.

pour l'explication du point 3

$html_product_sizes_json=htmlentities($html);
    $ProductSizesArr = json_decode($html_product_sizes_json,true);

à (supprimer la fonction htmlentities() )

$html_product_sizes_json=$html;
    $ProductSizesArr = json_decode($html_product_sizes_json,true);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X