2017-12-20 11 views
-1

GolangでJSONファイルを作成しようとしています。私はJSONファイルの知識はほとんど持っていませんが、作成するプログラムを作成しました。このプログラムでは、Webサイトからフォームデータを取り出し、そのデータをJSON構造体に格納し、その情報をフォルダに追加します。私はここに2つのセクションのデータを持っています。私はエラーが JSONファイルを正しく作成して読み込み

{ 
    "cl":"[v1]", 
    "gr":"[A]", 
    "cr":"[8]" 
} // End Of File Expected 
{ 
    "cl":"[v2]", 
    "gr":"[Z]", 
    "cr":"[8]" 
} 

だから、私の質問は、(1)エラーが何を意味しているエラーとともに発生し、(2)どのように/ GolangとJSONファイルを作成するときに、私はこの問題を解決することができますか?コメントを入れて私は必要に応じてゴランを供給することができます。

+6

これは有効なJSONではありません。あなたがアイテムのグループを持っているなら、それらはコンマで区切られた配列で配列を必要とするでしょう。 – Joe

+0

私はそれがどのように見えるべきかの例を教えてください。私はウェブ全体を見てきましたが、私はかなり混乱しています。 @Joe – HubbA

+2

[{"cl": "[v1]"、...}、{"cl": "[v2]"、...}] – Joe

答えて

1

したがって、jsonが正しくフォーマットされている以外、structおよびjson structタグを使用してjsonを作成する方法の例を次に示します。

適切なJSON

[ {キー:値、キー値}、 {キー:値、キー値} ]

何を持っていることは です{キー:値、キー値} {key:value、key value}

配列内の1つのオブジェクトではなく、2つの別々のオブジェクトです。

これをファイルから読み込み、データがサンプルのように返される場合は、改行を分割して各オブジェクトを分離し、それらを個別に非マーシャルする必要があります。

それ以外の場合は、以下の例をサーバーとして設定します。

package main 

import (
    "encoding/json" 
    "fmt" 
    "io/ioutil" 
    "strconv" 
) 

type j struct { 
    Cl []string `json:"cl"` 
    Gr []string `json:"gr"` 
    Cr []string `json:"cr"` 
} 

func main() { 
    // create an instance of j as a slice 
    var data []j 
    // using a for loop for create dummy data fast 
    for i := 0; i < 5; i++ { 
     v := strconv.Itoa(i) 
     data = append(data, j{ 
      Cl: []string{"foo " + v}, 
      Gr: []string{"bar " + v}, 
      Cr: []string{"foobar " + v}, 
     }) 
    } 

    // printing out json neatly to demonstrate 
    b, _ := json.MarshalIndent(data, "", " ") 
    fmt.Println(string(b)) 

    // writing json to file 

    _ = ioutil.WriteFile("file.json", b, 0644) 

    // to append to a file 
    // create the file if it doesn't exists with O_CREATE, Set the file up for read write, add the append flag and set the permission 
    f, err := os.OpenFile("/var/log/debug-web.log", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0660) 
    if err != nil { 
     log.Fatal(err) 
    } 
    // write to file, f.Write() 
    f.Write(b) 

    // if you are doing alot of I/O work you may not want to write out to file often instead load up a bytes.Buffer and write to file when you are done... assuming you don't run out of memory when loading to bytes.Buffer 


} 
+0

ファイルにどのように追加しますか?私はそれをアンマーシャリングし、データを追加してからもう一度マーシャリングを試みましたが、まったく新しいデータセットを追加するだけです。 – HubbA

+0

ビットに例を追加します – reticentroot

+0

また、データをファイルに追加する方法についても興味があります。 :) – GoofBall101

関連する問題