如何在GO中使用带json键的开关?

时间:2018-02-19 00:31:09

标签: json go

以下是POST请求正文的示例:

{"action":"do_something","id":"001"}

我举了一个简单的json解析器的例子

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type some_json struct {
    Action string `json:"action"`
    Id string `json:"id"`

}

func jsonparse(rw http.ResponseWriter, request *http.Request) {
    decoder := json.NewDecoder(request.Body)

    var post_data some_json
    err := decoder.Decode(&post_data)

    if err != nil {
        panic(err)
    }


    switch ***WHAT_SHOULD_BE_HERE???*** {
    default :
      fmt.Fprintf(w,"WRONG PARAM")
    case "some_thing":
      fmt.Fprintf(w,post_data.Id + "\n\n")
            }
}

func main() {
    http.HandleFunc("/", jsonparse)
    http.ListenAndServe(":8080", nil)
}

我已经知道如何从表单值切换案例,但是 如何切换json键值的情况?

1 个答案:

答案 0 :(得分:0)

我不确定你要切换什么,但我认为你只需要擦除()所以Action不再是函数调用

小心,也许你的错误是你混淆了字符串 在JSON:“do_something” 以防:“some_thing”

您可以将以下代码复制到游乐场

package main

import (
    "encoding/json"
    "fmt"
    "strings"
)

type some_json struct {
    Action string `json:"action"`
    Id     string `json:"id"`
}

func jsonparse() {
    r := strings.NewReader("{\"action\":\"do_something\",\"id\":\"001\"}")
    decoder := json.NewDecoder(r)

    var post_data some_json
    err := decoder.Decode(&post_data)

    if err != nil {
        panic(err)
    }

    switch post_data.Action {
    default:
        fmt.Println( "WRONG PARAM")
    case "do_something":
        fmt.Println( post_data.Id+"\n\n")
    }
}

func main() {
    jsonparse()
}