如何在我使用NSData从iOS发布的Golang服务器上读取JSON?

时间:2016-06-22 18:44:20

标签: ios json swift go nsdata

我正在尝试通过从iOS发送到我的自定义服务器来验证收据。

我有NSMutableURLRequest并将其设置为:

    let body: [String: AnyObject] = ["receipt": receipt, "prod_id": productID]

    let optionalJson: NSData?

    do {
        optionalJson = try NSJSONSerialization.dataWithJSONObject(body, options: [])
    } catch _ {
        optionalJson = nil
    }

    guard let json = optionalJson else { return }

    request.HTTPBody = json

然后我将它发送到我用Go编写的服务器,但我不知道如何读取数据。

以前我只发送数据(原始形式,而不是JSON结构),然后在发送之前变成基本的64位编码字符串:

data, _ := ioutil.ReadAll(request.Body)
encodedString := base64.StdEncoding.EncodeToString(data)

但现在我将prod_idstring相关联的JSON结构以及收据数据(我假设为bytes)。如何将其提取为可读的JSON,然后将其转换为基本的64位编码字符串,如上所述?

我想我不确定JSON会采用什么结构。

2 个答案:

答案 0 :(得分:0)

这就像是:

type Foo strut {
  Bar string `json:"bar"`
}

// extract
data, err := ioutil.ReadAll(request.Body)
if err != nil {
  return err
}
defer request.Body.Close()

v := &Foo{}
json.Unmarshal(data, v)    

json:"bar"中的Foo将JSON结构与Go结构

绑定在一起

答案 1 :(得分:0)

你应该创建如下的结构:

type MyRequest struct {
    Receipt string `json:"receipt"`
    ProdID string `json:"prod_id"`
}

然后解码请求正文:

func handleMyRequest(rw http.ResponseWriter, req *http.Request) {
    decoder := json.NewDecoder(req.Body)
    var myReq MyRequest
    err := decoder.Decode(&myReq)
    if err != nil {
        panic()
    }
    log.Println(myReq)
}