2012-06-29 19 views
6

¿Cómo recomendaría convertir un archivo de texto al formato JSON?Conversión de texto a JSON

Tengo un archivo de texto con cerca de 500 fragmentos de texto con el siguiente formato:

[number in brackets or astriek] 
[line1] 
[line2] 
[line3] 
[space] 
. 
. 
. 

quiero convertirlo a JSON, así:

"page1": { 
    "line1": "LINE1", 
    "line2": "LINE2", 
    "line3": "LINE3" 
}, 
"page2": { 
    "line1": "LINE1", 
    "line2": "LINE2", 
    "line3": "LINE3" 
} 
. 
. 
. 

ideas?

+0

¿En qué idioma? ¿Tienes herramientas de Linux disponibles? –

+0

Cualquier idioma, realmente. Herramientas Unix y un terminal totalmente operativo a su servicio. –

+0

¿Sabe que su archivo resultante no es json? Necesitas al menos '{' al principio y '}' al final. –

Respuesta

2

Lo más simple para mí sería hacerlo en java o ir.

En Java:

  • se puede leer un archivo línea tras línea con readLine utilizando un new BufferedReader(new FileReader(file))
  • se puede llenar un HashMap de HashMap<String,String> durante la lectura
  • crear un new BufferedWriter(new FileWriter(outputfilepath))
  • usando gson, entonces solo tiene que usar

esto:

Gson gson = new Gson(); 
gson.toJson(myList, myFileOutputStreamWriter); 

En Go:

No es necesario importar un paquete externo, Go incluye los necesitados.

esto sería algo como esto (algunas otras pruebas de error sería bueno):

package main 

import (
    "bufio" 
    "fmt" 
    "io" 
    "encoding/json" 
    "log" 
    "strings" 
    "os" 
) 

func main() { 
    myBigThing := make(map[string]map[string]string) 
    f, _ := os.Open("/home/dys/dev/go/src/tests/test.go") 
    r := bufio.NewReader(f) 
    var currentPage map[string]string 
    pageNum := 0 
    for { 
     line, err := r.ReadString('\n') 
     if err != nil { 
      if err != io.EOF { 
       log.Println("Error in parsing :", err) 
      } 
      break 
     } 
     if currentPage==nil { 
      currentPage = make(map[string]string) 
      myBigThing[fmt.Sprintf("page%d",pageNum)] = currentPage 
      pageNum++ 
     } else if line=="" { 
      currentPage = nil 
     } else { 
      tokens := strings.Split(line, ":") 
      if len(tokens)==2 { 
       currentPage[tokens[0]] = tokens[1] 
      } 
     }  
    } 
    f, err := os.Create("/home/dys/test.json") 
    if err != nil { 
     log.Println("Error :", err) 
     return 
    } 
    defer f.Close() 
    bout, _ := json.Marshal(myBigThing) 
    f.Write(bout) 
} 
+0

¡Gracias!Lo intentaré, aunque no de inmediato, parece que estuve un poco equivocado al anunciar que "cualquier lenguaje" haría, ¿alguna idea similar para Linux Bash, JS o Ruby, tal vez? –

+0

¿Quieres descubrir [Ir] (http://golang.org)? –

+0

:) Creo que sí. –

3

Usted podría utilizar Gelatin.

Utilizaría una gramática para definir su texto de entrada (puede ser un poco difícil si nunca lo ha hecho antes). Luego solo ejecuta su archivo de texto a través de Gelatina con su archivo de gramática y especifica el resultado.

Editar 1: Sería útil si publicara un fragmento de lo que intenta convertir.

+0

Esto parece prometedor. ¡Gracias! –

0

mediante Visual Studio

Si usted tiene los datos necesarios en un archivo de texto, esto va a ser la mejor opción.

Abrir Visual Studio y en el menú Archivo -> Nuevo -> Archivo Debajo de instalado, debe tener la opción "Web". Uno de los formatos enumerados allí es JSON.

Seleccione eso y Copie y pegue su documento de texto en VS. Guarde el archivo y está en formato JSON.

Cuestiones relacionadas