dqayok7935
2018-04-14 02:11
浏览 1.2k
已采纳

Golang保存到JSON文件

I am wondering why saving to json file does'nt work as I expected.

-If I input values in the fields and click submit button

-The form will submit and the process function executes

-The process.html renders the input values.

-The input values not saving to the json file.

import (
    "net/http" 
    "html/template" 
    "os" 
    "encoding/json"
)

var tpl *template.Template

type Data struct {
    First string `json:"First"`
    Last string `json:"Last"`
}

func init() {
    tpl = template.Must(template.ParseGlob("templates/*.gohtml"))    
}

func main() {
    http.HandleFunc("/", index);
    http.HandleFunc("/process", process); 
    http.ListenAndServe(":80", nil);   
}

func index(w http.ResponseWriter, r *http.Request) {
    tpl.ExecuteTemplate(w, "index.gohtml", nil)
}

func process(w http.ResponseWriter, r *http.Request) {
    if r.Method != "POST" {
        http.Redirect(w, r, "/", http.StatusSeeOther)
        return
    }

    f, err := os.Open("name.json");
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }
    defer f.Close();

    data := new(Data)
    data.First = r.FormValue("first");
    data.Last = r.FormValue("last");

    b, err := json.Marshal(data)
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    f.Write(b)
    f.Close()

    tpl.ExecuteTemplate(w, "process.gohtml", data)
}

图片转代码服务由CSDN问答提供 功能建议

我想知道为什么保存到json文件无法按预期工作。

-如果我在字段中输入值并单击提交按钮

-表单将提交并执行流程功能 \ n

- process.html 呈现输入值。

-输入值未保存到 json文件

  import(
“ net / http” 
“ html / template” 
“ os” 
“ encoding / json” 
)
 
var tpl  * template.Template 
 
type数据结构{
第一个字符串`json:“ First”`
最后一个字符串`json:“ Last”`
} 
 
func init(){
 tpl =模板。  Must(template.ParseGlob(“ templates / *。gohtml”))
} 
 
func main(){
 http.HandleFunc(“ /”,index); 
 http.HandleFunc(“ / process”, 处理);  
 http.ListenAndServe(“:80”,nil);  
} 
 
func索引(w http.ResponseWriter,r * http.Request){
 tpl.ExecuteTemplate(w,“ index.gohtml”,nil)
} 
 
func进程(w http.ResponseWriter  ,r * http.Request){
如果r.Method!=“ POST” {
 http.Redirect(w,r,“ /”,http.StatusSeeOther)
 return 
} 
 
f,err  := os.Open(“ name.json”); 
 if err!= nil {
 http.Error(w,err.Error(),500)
 return 
} 
延迟f.Close(  ); 
 
 data:= new(Data)
 data.First = r.FormValue(“ first”); 
 data.Last = r.FormValue(“ last”); 
 
b,err:  = json.Marshal(data)
 if err!= nil {
 http.Error(w,err.Error(),500)
 return 
} 
 
 f.Write(b)
 f  .Close()
 
 tpl.ExecuteTemplate(w,“ process.gohtml”,data)
} 
   
 
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题