Unexpected end of JSON input

Pour vous aider, il faudrait fournir (en Message direct) l’URL qui permet de récupérer le json .

https://opendata.aemet.es/opendata/sh/12bd2a6d

vous devez utiliser l’url rapide. Parce que les données expirent. Si c’est le cas, je le génère à nouveau avec ma clé API

https://opendata.aemet.es/opendata/sh/12bd2a6d c’est à nouveau valable

1 « J'aime »

https://opendata.aemet.es/opendata/sh/12bd2a6d de nouveau disponible

Je rafraîchis régulièrement pour qu’il n’expire pas

Il y a des caractères utf8 invalides dans le json:


Le json ne devrait contenir que des caractères utf8 et là il y a des iso8859/windows.

Il faudrait pouvoir ajouter un flag JSON_INVALID_UTF8_SUBSTITUTE ou JSON_INVALID_UTF8_IGNORE à json_decode ce qui n’est pas possible sans modifier le plugin script.

Pouvez- vous faire corriger le json qui est incorrect ? Je vois qu’en face c’est un organisme d’état donc pas de solution rapide de ce coté.
Sinon il faudrait faire un script intermédiaire qui corrigerait le json
ou demander l’ajout des flags dans le plugin script.

1 « J'aime »

Vous n’avez pas compris: vous êtes sur un forum communautaire, vous n’avez donc pas à interpeller l’auteur d’un plug-in directement.
De plus ici c’est un plug-in officiel, c’est donc l’équipe jeedom qui est responsable.

Un petit rappel des règles: Comment nous aider à vous aider - ou Comment poser une bonne question?

La modif qu’il faudrait faire dans le plugin script pour que les caractères UTF8 invalides soient supprimés des fichiers json :
C’est dans le fichier core/class/script.class.php, fonction execute

switch ($this->getConfiguration('requestType')) {
....
 case 'json':

Avant:

    // $json_str = str_replace(": nan ", ": null ",$json_str); 
	$json = json_decode($json_str, true);
	if ($json === null) {
	  throw new Exception(__('Json invalide ou non décodable : ', __FILE__) . $json_str);
	}
	

Après:

    // $json_str = str_replace(": nan ", ": null ",$json_str); 
	$json = json_decode($json_str, true);
    if ($json === null) {
      $json = json_decode($json_str, true, 512, JSON_INVALID_UTF8_IGNORE);
      if ($json === null) {
        throw new Exception(__('Json invalide ou non décodable : ', __FILE__) . $json_str);
      }
    }

ou directement

    // $json_str = str_replace(": nan ", ": null ",$json_str); 
	$json = json_decode($json_str, true, 512, JSON_INVALID_UTF8_IGNORE);
	if ($json === null) {
	  throw new Exception(__('Json invalide ou non décodable : ', __FILE__) . $json_str);
	}
	

Il faut php 7.2 minimum pour cette modif.

Le résultat avec une requête 0>origen>productor qui contient des UTF8 invalides
image

2 « J'aime »

Wow merci.
je vais le modifier mais
Que faudrait-il faire pour que l’équipe Jeedom prenne en compte votre suggestion de façon définitive ?

Bonjour,
Faire un PR sur git jeedom et qu’il soit accepter

je ne suis pas à ce niveau de connaissances

1 « J'aime »

J’ai fait la PR en beta:

5 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.