entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

4votos

Regex para encontrar el contenido de una variable en JSON

Hola a todos:

estoy intentando usar una expresión regular para encontrar un texto en un JSON. El problema es que el JSON que dispongo no tiene la misma estructura siempre. El JSON tiene este aspecto:

{
  "contributors": null,
  "coordinates": null,
  "text": "#FollowFriday @France_Inte @PKuchly57 @Milipol_Paris for being top engaged members in my community this week :)",
  "user": {
    "time_zone": "Paris",
[...mucha mas información]
{
  "contributors": null,
  "coordinates": null,
  "text": "@Lamb2ja Hey James! How odd :/ Please call our Contact Centre on 02392441234 and we will be able to assist you :) Many thanks!",
  "user": {
    "time_zone": "Paris",
[...]

Lo que pretendo es encontrar una regex que me busque únicamente todo el contenido de todos los text. Por ahora había pensado en algo así:

"text": "(.*)",

El problema está en que no sólo me encuentra el contenido del text, sino que me selecciona prácticamente todo el JSON.
Otra opción que se me ha ocurrido es crear un script en python pero el JSON tiene mas de 5000 entradas....
¿Alguien podría ayudarme con la regex o con un script en python?

Un saludo

morgooth comentado Dic 7, 2016

Te sirve que este en perl ?

3 Respuestas

3votos

morgooth Puntos1040

Archivo input.txt:

{
  "contributors": null,
  "coordinates": null,
  "text": "#FollowFriday @France_Inte @PKuchly57 @Milipol_Paris for being top engaged members in my community this week :)",
  "user": {
    "time_zone": "Paris",
[...mucha mas información]
{
  "contributors": null,
  "coordinates": null,
  "text": "@Lamb2ja Hey James! How odd :/ Please call our Contact Centre on 02392441234 and we will be able to assist you :) Many thanks!",
  "user": {
    "time_zone": "Paris",
[...]

Script perl:

#!/usr/bin/perl -w

my $filename;
my $rr;
$filename = 'input.txt';
if (open(my $fh, '<:encoding(UTF-8)', $filename)) {
  while (my $row = <$fh>) {
    chomp $row;
        if($row =~ /\"text\"/){
                $result = $1 if($row =~ /\"text\".*\"(.*)\".*/);
                print "$result\n";
        }
  }
} else {
  warn "Could not open file '$filename' $!";
}

Salida:

#FollowFriday @France_Inte @PKuchly57 @Milipol_Paris for being top engaged members in my community this week :)
@Lamb2ja Hey James! How odd :/ Please call our Contact Centre on 02392441234 and we will be able to assist you :) Many thanks!

Espero te ayude

Saludos

4votos

Leonardo-Tadei Puntos208250

Hola @elmoyer,

no sería más simple cargar el JSON a una estructura de Python y luego recorrerla para obtener los elementos con clave TEXT?

Python puede importar el JSON para luego poder recorrerlo.

La idea de JSON es justamente que ese string se convierta en estructuras del lenguaje destino, justamente para evitar tener que parsear la cadena encontrando cosas que puede ser ambiguas.

Saludos cordiales!

1voto

elmoyer Puntos830

Gracias a los dos! al final encontré una "solución" bastante simple y también hay que decirlo muy cutre :S

Usé SublimeText y me di cuenta que cada objeto del JSON comenzaba siempre con las mismas entradas por lo que use la opción del editor de sustituir y emplee una regex muy simple hasta que llegase al "text" y lo mismo con las entradas que había al final del valor de texto :D

De todas formas gracias otra vez y para dentro de poco usaré el script que me has puesto @morgooth
Un saludo!

Peter comentado Dic 15, 2016

Si esta es la solución, por favor selecciona la respuesta como correcta. No hace falta que cambies los títulos a solucionado, seleccionando una respuesta correcta el sistema lo hace de forma automática.

Gracias.

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

  • yoclens ganó una medalla hace 27 minutos

    Buena Pregunta - Recibido +1 votos en pregunta
  • yoclens preguntó hace 2 horas

    capturar valores del input
  • yoclens ganó una medalla hace 16 horas

    Regular - Primera visita hace más de 90 días
  • internoma ganó una medalla hace 1 día

    Club de los 100 - Received total of 100 points
  • Leonardo-Tadei ganó una medalla hace 2 días

    Buen Comentario - Recibió +2 votos
  • sommer0123 ganó una medalla hace 2 días

    Buena Respuesta - Recibido +1 votos en respuesta
  • gerko23 ganó una medalla hace 2 días

    Buena Respuesta - Recibido +1 votos en respuesta
  • carlossevi ganó una medalla hace 2 días

    Buena Respuesta - Recibido +1 votos en respuesta
  • carlossevi ganó una medalla hace 2 días

    Buen Comentario - Recibió +2 votos
  • edisonosorioj ganó una medalla hace 2 días

    Club de los 100 - Received total of 100 points

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta