7

テキスト ファイルを 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"
}
.
.
.

アイデア?

4

3 に答える 3

3

ゼラチンを使用できます。

文法を使用して入力テキストを定義します (これまでに行ったことがない場合は、少し難しいかもしれません)。次に、文法ファイルを使用して Gelatin を介してテキスト ファイルを実行し、出力を指定します。

編集 1: 変換しようとしているもののスニペットを投稿していただけると助かります。

于 2012-06-29T16:37:34.210 に答える
2

私にとって最も簡単なのは、Javaまたはgoで行うことです。

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 には必要なものが含まれています。

これは次のようになります (他のエラー テストが適切です)。

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)
}
于 2012-06-29T16:35:15.617 に答える