• Publicidad

Omitir error JSON

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Omitir error JSON

Notapor rraulqm92 » 2014-10-28 11:38 @526

Buenas a todos.

Les explico: Tengo un solr que me saca una URL que contiene unos datos en formato JSON.

He creado un script que entra en el json y me guarda los datos para crear un correo electrónico.

El script funciona cuando hay datos, pero hay veces que mi json no debe tener datos. Cuando sucede esto necesitaría pasar a la siguiente llamada pero me salta el siguiente error:

"malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)")"

¿Cómo podría hacer para omitir estos errores y que mi script no se quedara parado?

Esta es la llamada al json:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                         $url = get($url);
  2.                         utf8::encode($url)
  3.  
  4.                         my $decoded = decode_json( $url );
  5.                         my @response = @{$decoded->{'response'}->{'docs'} };
  6.                         foreach my $data ( @response ) {
  7.                                 $contador = $contador +1;
  8.                                 my $titulo_disp = $data->{'titulo'};
  9.                                 my $id_disposicion = $data->{'id'};
  10.                          }
  11.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¡Muchas gracias!
Última edición por explorer el 2014-10-28 13:09 @589, editado 1 vez en total
Razón: Como => ¿Cómo; Admiraciones
rraulqm92
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2014-10-07 04:29 @228

Publicidad

Re: Omitir error JSON

Notapor explorer » 2014-10-28 13:48 @616

El tema está en las líneas 639 y siguientes de JSON:backportPP:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     sub PP_decode_json {
  2.         my ($self, $opt); # $opt is an effective flag during this decode_json.
  3.  
  4.         ($self, $text, $opt) = @_;
  5.  
  6.         ($at, $ch, $depth) = (0, '', 0);
  7.  
  8.         if ( !defined $text or ref $text ) {
  9.             decode_error("malformed JSON string, neither array, object, number, string or atom");
  10.         }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Ahí vemos que sale el error que mencionas. Es decir: sale el error si $text está vacío o no es una referencia. Lo que luego hace decode_error es generar una llamada Carp que saca el error en pantalla.

Si el error es solamente detectar si el texto está vacío o no, esa comprobación la puedes hacer antes de hacer el decodificado JSON:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                         $url = get($url);
  2.                         utf8::encode($url)
  3.  
  4.                         if ($url) {               # comprobamos que tenemos al menos algo
  5.                             my $decoded = decode_json( $url );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Otra forma es capturar el error, con un eval():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. eval {
  2.     $url = get($url):
  3.     utf8::encode($url)
  4.     my $decoded = decode_json( $url );
  5.     ...;
  6. }
  7. if ($@) {
  8.     warn $@;
  9. }
  10.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Bueno, queda más bonito con Try:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. try {
  2.     $url = get($url):
  3.     utf8::encode($url)
  4.     my $decoded = decode_json( $url );
  5.     ...;
  6. }
  7. catch {
  8.     when (/malformed JSON string/) {
  9.         warn "Error en la cadena JSON";
  10.     }
  11. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Omitir error JSON

Notapor rraulqm92 » 2014-10-29 11:21 @515

¡¡¡Muchas gracias!!!

Me salvaste de un apuro. Utilicé el último método, el de Try :D
Última edición por explorer el 2014-10-29 13:49 @617, editado 1 vez en total
Razón: Admiraciones; Utilice => Utilicé; ultimo => último; metodo => método;
rraulqm92
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2014-10-07 04:29 @228


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado