2012-06-29 12 views
6

Come si consiglia di convertire un file di testo in formato JSON?Conversione di testo in JSON

Ho un file di testo con circa 500 parti di testo nel seguente formato:

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

voglio convertirlo in JSON, in questo modo:

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

idee?

+0

In che lingua? Avete strumenti Linux disponibili? –

+0

Qualsiasi lingua, davvero. Strumenti Unix e un terminale pienamente operativo al tuo servizio. –

+0

Sei consapevole che il tuo file risultante non è json? Hai bisogno di almeno '{' all'inizio e '}' alla fine. –

risposta

2

Il modo più semplice per me sarebbe farlo in java o go.

In Java:

  • si può leggere un file riga dopo riga con readLine utilizzando un new BufferedReader(new FileReader(file))
  • si può riempire un HashMap di HashMap<String,String> durante la lettura
  • creare un new BufferedWriter(new FileWriter(outputfilepath))
  • utilizzando gson, è quindi sufficiente utilizzare

questo:

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

In Vai:

Non è necessario importare un pacchetto esterno, Go include quelli necessari.

questo sarebbe qualcosa di simile (qualche altro test errore sarebbe bene):

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

Grazie!Ci proverò, anche se non subito - sembra che sia stato un po 'fuori per annunciare che "qualsiasi linguaggio" avrebbe fatto - qualche idea simile per Linux Bash, JS o Ruby, forse? –

+0

Vuoi scoprire [Vai] (http://golang.org)? –

+0

:) Penso di sì. –

3

Si potrebbe utilizzare Gelatin.

Dovresti utilizzare una grammatica per definire il testo di input (può essere un po 'difficile se non lo hai mai fatto prima). Quindi esegui il tuo file di testo tramite Gelatina con il tuo file di grammatica e specifica l'output.

Modifica 1: Sarebbe utile se si pubblicherebbe un frammento di ciò che si sta tentando di convertire.

+0

Questo sembra promettente. Grazie! –

0

Utilizzando Visual Studio

Se si dispone dei dati necessari in un file di testo, questo sarà l'opzione migliore.

Aprire Visual Studio e nel menu File -> Nuovo -> File Sotto l'installato, si dovrebbe avere l'opzione "Web". Uno dei formati elencati è JSON.

Selezionalo e copia e incolla il documento di testo in VS. Salva il file ed è in formato JSON.

Problemi correlati