使用golang将符合RFC 3986编码的URL字符串解码为json

时间:2018-01-18 04:58:19

标签: go

我有一个符合RFC 3986的URL编码字符串。我想将此字符串解码为JSON。

是否有API调用才能完成此操作?我在https://golang.org/pkg/net/url/#URL.String

中找不到任何内容

我得到一个字符串作为aws服务的API调用之一的响应。它在docs.aws.amazon.com/IAM/latest/APIReference/...中进行了描述。如此处所述,我将获得符合RFC 3986的URL编码的aws策略。我想将其转换为普通的JSON格式。

1 个答案:

答案 0 :(得分:2)

您可以使用url.QueryUnEscape解码字符串,然后使用json.Marshal转换为json

package main

import (
    "net/url"
    "log"
    "fmt"
    "encoding/json"
)

type User struct {
    Name string `json:"name"`
    Age int `json:"age"`
}

func main() {
    s := "%7B%22name%22%3A%22user1%22%2C%22age%22%3A30%7D" // URL encoded value

    in, err := url.QueryUnescape(s)
    if err != nil {
        log.Fatal(err.Error())
    }
    fmt.Printf("query escaped %s \n", in)
    var u User
    // unmarshalling
    json.Unmarshal([]byte(in),&u)
    fmt.Printf("username : %s,  age %d \n", u.Name, u.Age)

    //marshalling
    bytes , err := json.Marshal(in)
    if err != nil {
        log.Fatal(err.Error())
    }
    fmt.Println(string(bytes))
}