golang unencode string to be parsable into json

huangapple go评论120阅读模式
英文:

golang unencode string to be parsable into json

问题

如何使这个工作?

  1. 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")
  2. fmt.Println(s)
  3. //s := "{\"sessionId\":\"5331b937-7b55-4c2d-798a-25e574a7e8af\",\"userId\":2,\"userName\":\"op\",\"userEmail\":\"datami_op@example.com\",\"userRoles\":[\"operator\"]}"
  4. var i Info
  5. err := json.Unmarshal([]byte(s), &i)
  6. fmt.Println(i, err)
英文:

How do I get this to work?

  1. 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")
  2. fmt.Println(s)
  3. //s := "{\"sessionId\":\"5331b937-7b55-4c2d-798a-25e574a7e8af\",\"userId\":2,\"userName\":\"op\",\"userEmail\":\"datami_op@example.com\",\"userRoles\":[\"operator\"]}"
  4. var i Info
  5. err := json.Unmarshal([]byte(s), &i)
  6. fmt.Println(i, err)

答案1

得分: 1

你可以手动删除引号,就像你在评论中所做的那样,或者你可以首先将其解组为一个JSON字符串:

  1. var unquote string
  2. err := json.Unmarshal([]byte(s), &unquote)
  3. fmt.Println(unquote, err)
  4. var i Info
  5. err = json.Unmarshal([]byte(unquote), &i)
  6. fmt.Println(i, err)
英文:

You can either manually remove the quoting yourself, as you have in your comment, or you could unmarshal first as a json string:

  1. var unquote string
  2. err := json.Unmarshal([]byte(s), &unquote)
  3. fmt.Println(unquote, err)
  4. var i Info
  5. err = json.Unmarshal([]byte(unquote), &i)
  6. fmt.Println(i, err)

答案2

得分: 1

我相信这是你想要的代码:

  1. func unmarshalJsonJson(inval string) (*Info, error) {
  2. var s string
  3. err := json.Unmarshal([]byte(inval), &s)
  4. if err != nil {
  5. return nil, err
  6. }
  7. info := new(Info)
  8. err = json.Unmarshal([]byte(s), info)
  9. if err != nil {
  10. return nil, err
  11. }
  12. return info, nil
  13. }

输出

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

请注意,这只是代码的翻译部分,不包括任何其他内容。

英文:

I believe this does what you want:
<kbd>GoPlay</kbd>

Essentially you implement unmarshalJsonJson (clever name, I know)...
The function will unmarshal as a json string, then use that string in the Info unmarshalling.

  1. func unmarshalJsonJson(inval string) (*Info, error) {
  2. var s string
  3. err := json.Unmarshal([]byte(inval), &amp;s)
  4. if err != nil {
  5. return nil, err
  6. }
  7. info := new(Info)
  8. err = json.Unmarshal([]byte(s), info)
  9. if err != nil {
  10. return nil, err
  11. }
  12. return info, nil
  13. }

OUTPUT

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

huangapple
  • 本文由 发表于 2015年3月4日 04:20:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/28841195.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定