Tengo este objeto JSON almacenado en un archivo de texto sin formato:
{
"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"
}
}
Cuando intento decodificarlo json_decode()
, devuelve NULL. ¿Por qué? El archivo es legible (intenté hacer eco file_get_contents()
y funcionó bien).
Probé JSON contra http://jsonlint.com/ y es perfectamente válido.
¿Qué pasa aquí?
Solución
Buscando respuestas en Google, volví a SO: json_decode devuelve NULL después de la llamada al servicio web . Mi archivo JSON tenía la secuencia UTF BOM (algunos caracteres binarios que no deberían estar allí), rompiendo así la estructura JSON. Fui al editor hexadecimal, borré los bytes. Todo volvió a la normalidad. ¿Por qué ha sucedido esto? Porque edité el archivo usando el Bloc de notas de Microsoft Windows. ¡Terrible idea!
json_last_error()
.Respuestas:
Podría ser la codificación de los caracteres especiales. Puede pedirle a json_last_error () que obtenga información definitiva.
fuente
json_last_error()
porque es PHP 5.2.9. Esa función aparece en PHP 5.3.0.utf8_decode()
primero, entoncesjson_decode()
falla silenciosamente.Esto funcionó para mi
fuente
Podrías intentarlo.
fuente
stripslashes()
dos veces, lo que eliminó las barras inclinadas esenciales y causó una cadena JSON no válida. Esta respuesta me ayudó a detectar el errorSi marca la solicitud en Chrome, verá que el JSON es texto, por lo que se ha agregado un código en blanco al JSON.
Puedes borrarlo usando
$k=preg_replace('/\s+/', '',$k);
Entonces puedes usar:
json_decode($k)
print_r
luego mostrará la matriz.fuente
$k=preg_replace('/\s+/', ' ',$k);
Tuve el mismo problema y lo resolví simplemente reemplazando el carácter de cita antes de decodificar.
Mi valor JSON fue generado por la función JSON.stringify.
fuente
Tal vez algunos personajes ocultos estén jugando con su json, intente esto:
fuente
lo hizo por mí. Y sí, probando en Chrome. Gracias al usuario2254008
fuente
Solo pensé en agregar esto, ya que me encontré con este problema hoy. Si hay algún relleno de cadena alrededor de su cadena JSON, json_decode devolverá NULL.
Si está extrayendo el JSON de una fuente que no sea una variable de PHP, sería prudente "recortarlo" primero:
fuente
esto le ayudará a comprender cuál es el tipo de error
fuente
Solo guarda algo una vez. Pasé 3 horas para descubrir que era solo un problema de codificación html. Prueba esto
fuente
Como lo indicó Jürgen Math, el uso del método preg_replace enumerado por user2254008 también lo solucionó para mí.
Esto no se limita a Chrome, parece ser un problema de conversión de juego de caracteres (al menos en mi caso, Unicode -> UTF8) Esto solucionó todos los problemas que estaba teniendo.
Como nodo futuro, el objeto JSON que estaba decodificando provino de la función json.dumps de Python. Esto, a su vez, provocó que otros datos insalubres aparecieran, aunque se trató fácilmente.
fuente
Si obtiene json de la base de datos, coloque
después de definir el enlace de conexión $ con
fuente
Aquí puede encontrar un pequeño contenedor JSON con acciones correctivas que abordan el problema de BOM y no ASCI: https://stackoverflow.com/a/43694325/2254935
fuente
En mi caso, se debe a la comilla simple en la cadena JSON.
El formato JSON solo acepta comillas dobles para claves y valores de cadena.
Ejemplo:
Tengo esto confundido debido a la sintaxis de Javascript. En Javascript, por supuesto, podemos hacer así:
pero más tarde, cuando convierta esos objetos en una cadena JSON:
fuente
Resolví este problema imprimiendo el JSON y luego verificando la fuente de la página (CTRL / CMD + U):
Resultó que había una
<pre>
etiqueta al final .fuente
deberías asegurarte estos puntos
1. su cadena json no tiene caracteres desconocidos
2. la cadena json se puede ver desde el visor json en línea (puede buscar en google como visor o analizador en línea para json) debería verse sin ningún error
3. su cadena no tiene entidades html, debe ser texto sin formato / cadena
para la explicación del punto 3
para (eliminar la función htmlentities ())
fuente
Para mí, tuve que desactivar el error_reporting para que json_decode () funcione correctamente. Suena extraño, pero cierto en mi caso. Porque hay un aviso impreso entre la cadena JSON que estoy tratando de decodificar.
fuente
Lo más importante que debe recordar, cuando obtiene un resultado NULL de datos JSON que es válido es usar el siguiente comando:
Es decir.
Luego arregla eso con:
fuente
Entonces, html_entity_decode () funcionó para mí. Por favor intente esto.
fuente
fuente