2012-06-29 16 views
6

Jak poleciłbyś konwertowanie pliku tekstowego do formatu JSON?Konwersja tekstu na JSON

Mam plik tekstowy z około 500 bitów tekst w następującym formacie:

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

chcę przekonwertować go do formatu JSON, tak:

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

pomysły?

+0

W jakim języku? Czy masz dostępne narzędzia Linux? –

+0

Każdy język, naprawdę. Narzędzia Unix i w pełni działający terminal do usług. –

+0

Czy wiesz, że plik wynikowy nie jest jsonem? Na końcu potrzebujesz przynajmniej '{' na początku i '}'. –

Odpowiedz

2

Najprostszy dla mnie byłby zrobić to w java albo idę.

W Javie:

  • można odczytać pliku linia po linii z readLine użyciem new BufferedReader(new FileReader(file))
  • można wypełnić HashMap z HashMap<String,String> podczas czytania
  • stworzyć new BufferedWriter(new FileWriter(outputfilepath))
  • używając gson, musisz po prostu użyć

to:

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

w Go:

Nie trzeba zaimportować pakiet zewnętrznych, przejdź zawiera potrzebne nich.

To byłoby coś takiego (niektóre inne badania błędu byłoby dobrze):

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

Dzięki!Spróbuję tego, choć nie od razu - wydaje mi się, że byłem trochę za wcześnie, by ogłosić, że "zrobi to jakikolwiek język" - jakieś podobne pomysły na Linux Bash, JS czy Ruby? –

+0

Chcesz odkryć [Go] (http://golang.org)? –

+0

:) Myślę, że tak. –

3

Można użyć Gelatin.

Używałbyś gramatyki do zdefiniowania tekstu wejściowego (może być trochę trudny, jeśli nigdy wcześniej tego nie robiłeś). Następnie wystarczy uruchomić plik tekstowy za pomocą Gelatin z plikiem gramatycznym i określić dane wyjściowe.

Edytuj 1: Byłoby pomocne, gdyby opublikować fragment tego, co próbujesz przekonwertować.

+0

To wygląda obiecująco. Dzięki! –

0

Korzystanie z Visual Studio

Jeśli masz wymaganych danych w pliku tekstowym, to będzie najlepszym rozwiązaniem.

Otwórz Visual Studio i pod menu Plik -> Nowy -> Plik Pod zainstalowaną opcją powinieneś mieć opcję "Sieć". Jednym z wymienionych tam formatów jest JSON.

Wybierz to i skopiuj i wklej dokument tekstowy w VS. Zapisz plik i jest w formacie JSON.