2012-06-29 4 views
6

Как вы рекомендуете преобразовывать текстовый файл в формат JSON?Преобразование текста в JSON

У меня есть текстовый файл с примерно 500 бит текста в следующем формате:

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

Я хочу, чтобы преобразовать его в формат JSON, например, так:

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

Идеи?

+0

На каком языке? У вас есть инструменты linux? –

+0

Любой язык, действительно. Unix и полностью работоспособный терминал. –

+0

Знаете ли вы, что ваш результирующий файл не json? Вам нужно как минимум '{' в начале и '}' в конце. –

ответ

2

Простейший для меня будет делать это в java или идти.

В Java:

  • вы можете прочитать файл строку после строки с readLine использованием new BufferedReader(new FileReader(file))
  • вы можете заполнить HashMap из HashMap<String,String> во время чтения
  • создать new BufferedWriter(new FileWriter(outputfilepath))
  • используя gson, вам просто нужно использовать

это:

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

В Go:

Вам не нужно импортировать внешний пакет, Go включает в себя необходимые из них.

Это было бы что-то вроде этого (некоторые другие тестирования ошибка будет хорошо):

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

Спасибо!Я попробую, хотя и не сразу - кажется, что я был немного рад объявить, что «любой язык» будет делать - любые подобные идеи для Linux Bash, JS или Ruby, возможно? –

+0

Вы хотите открыть [Go] (http://golang.org)? –

+0

:) думаю есть. –

3

Вы можете использовать Gelatin.

Вы должны использовать грамматику для определения текста ввода (может быть немного сложно, если вы никогда этого не делали раньше). Затем вы просто запускаете свой текстовый файл через Gelatin с вашим грамматическим файлом и указываете результат.

Редактировать 1: Было бы полезно, если бы вы опубликовали фрагмент того, что вы пытаетесь преобразовать.

+0

Это выглядит многообещающим. Благодаря! –

0

с помощью Visual Studio

Если у вас есть необходимые данные в текстовом файле, это будет лучшим вариантом.

Открыть визуальную студию и в меню «Файл» -> Создать -> Файл В установленном вам должна быть опция «Веб». Один из доступных здесь форматов - JSON.

Выберите это и скопируйте и вставьте свой текстовый документ в VS. Сохраните файл, и он находится в формате JSON.

Смежные вопросы