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

1voto

morgooth comentado

Te sirve que este en perl ?

3 Respuestas

3votos

morgooth Puntos2340

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 Puntos227320

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 Puntos1000

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!

1voto

Peter comentado

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.

Otras Preguntas y Respuestas


...

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

Conecta