J'ai cet objet JSON stocké dans un fichier texte brut:
{
"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"
}
}
Quand j'essaye de le décoder avec json_decode()
, il renvoie NULL. Pourquoi? Le fichier est lisible (j'ai essayé de faire écho file_get_contents()
et cela a bien fonctionné).
J'ai testé JSON contre http://jsonlint.com/ et c'est parfaitement valide.
Quel est le problème ici?
Solution
Cherchant des réponses sur Google, je suis revenu à SO: json_decode renvoie NULL après un appel au service Web . Mon fichier JSON avait la séquence UTF BOM (certains caractères binaires qui ne devraient pas être là), cassant ainsi la structure JSON. Je suis allé à Hex Editor, j'ai effacé les octets. Tout est revenu à la normale. Pourquoi est-ce arrivé? Parce que j'ai édité le fichier à l'aide du bloc-notes de Microsoft Windows. Terrible idée!
json_last_error()
.Réponses:
Cela peut être l'encodage des caractères spéciaux. Vous pouvez demander à json_last_error () d'obtenir des informations précises.
la source
json_last_error()
car c'est PHP 5.2.9. Cette fonction apparaît sur PHP 5.3.0.utf8_decode()
premier, puisjson_decode()
échoue silencieusement.Cela a fonctionné pour moi
la source
Vous pouvez essayer avec.
la source
stripslashes()
deux fois, ce qui a supprimé les barres obliques essentielles et causé une chaîne JSON invalide. Cette réponse m'a aidé à repérer l'erreurSi vous vérifiez la demande dans Chrome, vous verrez que le JSON est du texte, donc un code vide a été ajouté au JSON.
Vous pouvez l'effacer en utilisant
$k=preg_replace('/\s+/', '',$k);
Ensuite, vous pouvez utiliser:
json_decode($k)
print_r
affichera alors le tableau.la source
$k=preg_replace('/\s+/', ' ',$k);
J'ai eu le même problème et je l'ai résolu simplement en remplaçant le caractère de citation avant le décodage.
Ma valeur JSON a été générée par la fonction JSON.stringify.
la source
Peut-être que certains personnages cachés dérangent votre json, essayez ceci:
la source
l'a fait pour moi. Et oui, des tests sur Chrome. Thx à user2254008
la source
Je pensais juste ajouter ceci, car je suis tombé sur ce problème aujourd'hui. S'il y a un remplissage de chaîne autour de votre chaîne JSON, json_decode retournera NULL.
Si vous extrayez le JSON d'une source autre qu'une variable PHP, il serait sage de le «découper» d'abord:
la source
cela vous aide à comprendre quel est le type d'erreur
la source
Gardez juste une fois. J'ai passé 3 heures à découvrir que c'était juste un problème d'encodage html. Essaye ça
la source
Comme indiqué par Jürgen Math en utilisant la méthode preg_replace répertoriée par user2254008, cela a également été corrigé pour moi.
Cela ne se limite pas à Chrome, il semble s'agir d'un problème de conversion de jeu de caractères (du moins dans mon cas, Unicode -> UTF8). Cela a résolu tous les problèmes que j'avais.
En tant que futur nœud, l'objet JSON que je décodais provenait de la fonction json.dumps de Python. Cela a à son tour provoqué la diffusion d'autres données insalubres bien qu'elles aient été facilement traitées.
la source
Si vous obtenez json de la base de données, mettez
après avoir défini le lien de connexion $ con
la source
Ici vous pouvez trouver un petit wrapper JSON avec des actions correctives qui résout les problèmes de nomenclature et non-ASCI: https://stackoverflow.com/a/43694325/2254935
la source
Dans mon cas, c'est à cause du guillemet simple dans la chaîne JSON.
Le format JSON n'accepte que les guillemets doubles pour les clés et les valeurs de chaîne.
Exemple:
Je suis confus à cause de la syntaxe Javascript. En Javascript, bien sûr, nous pouvons faire comme ceci:
mais plus tard, lors de la conversion de ces objets en chaîne JSON:
la source
J'ai résolu ce problème en imprimant le JSON, puis en vérifiant la source de la page (CTRL / CMD + U):
Il s'est avéré qu'il y avait une
<pre>
balise de fin .la source
vous devez vous assurer de ces points
1. votre chaîne json ne contient aucun caractère inconnu
2. la chaîne json peut être vue depuis le visualiseur json en ligne (vous pouvez rechercher sur google en tant que visualiseur en ligne ou parser pour json), elle devrait afficher sans aucune erreur
3. votre chaîne n'a pas d'entités html, elle doit être du texte brut / chaîne
pour l'explication du point 3
to (supprimer la fonction htmlentities ())
la source
Pour moi, je devais désactiver le error_reporting , pour obtenir json_decode () fonctionne correctement. Cela semble étrange, mais vrai dans mon cas. Parce qu'il y a un avis imprimé entre la chaîne JSON que j'essaie de décoder.
la source
La chose la plus importante à retenir, lorsque vous obtenez un résultat NULL à partir de données JSON qui est valide, est d'utiliser la commande suivante:
C'est à dire.
Vous corrigez ensuite cela avec:
la source
Donc, html_entity_decode () a fonctionné pour moi. Veuillez essayer ceci.
la source
la source