golang unncode字符串可以解析为json

时间:2015-03-03 20:20:28

标签: go url-encoding

如何让this工作?

s, _ := url.QueryUnescape("%22%7B%5C%22sessionId%5C%22%3A%5C%225331b937-7b55-4c2d-798a-25e574a7e8af%5C%22%2C%5C%22userId%5C%22%3A2%2C%5C%22userName%5C%22%3A%5C%22datami_op%5C%22%2C%5C%22userEmail%5C%22%3A%5C%22datami_op%40example.com%5C%22%2C%5C%22userRoles%5C%22%3A%5B%5C%22operator%5C%22%5D%7D%22")
fmt.Println(s)
//s := "{\"sessionId\":\"5331b937-7b55-4c2d-798a-25e574a7e8af\",\"userId\":2,\"userName\":\"op\",\"userEmail\":\"datami_op@example.com\",\"userRoles\":[\"operator\"]}"
var i Info
err := json.Unmarshal([]byte(s), &i)
fmt.Println(i, err)

2 个答案:

答案 0 :(得分:1)

您可以自己手动删除引用,就像在评论中一样,或者您可以先将其解组为json字符串:

var unquote string
err := json.Unmarshal([]byte(s), &unquote)
fmt.Println(unquote, err)

var i Info 
err = json.Unmarshal([]byte(unquote), &i)
fmt.Println(i, err)

答案 1 :(得分:1)

我相信这可以做你想要的: GoPlay

基本上你实现unmarshalJsonJson(聪明的名字,我知道)...... 该函数将作为json字符串解组,然后在Info unmarshalling中使用该字符串。

func unmarshalJsonJson(inval string) (*Info, error) {
    var s string
    err := json.Unmarshal([]byte(inval), &s)
    if err != nil {
        return nil, err
    }
    info := new(Info)
    err = json.Unmarshal([]byte(s), info)
    if err != nil {
        return nil, err
    }
    return info, nil
}

输出

main.Info{
    SessionId:"5331b937-7b55-4c2d-798a-25e574a7e8af",
    UserId:2,
    Username:"datami_op",
    Email:"datami_op@example.com",
    Roles:[]string{"operator"},
}