英文:
Parse escaped json string in Golang
问题
你好!要将上述的 JSON 字符串转换为结构体,你可以使用编程语言提供的 JSON 解析库来实现。以下是一个示例代码,展示了如何在 Python 中完成这个任务:
import json
json_string = '{"A":"a","B":"b","C":"c","D":2,"E":"e"}'
data = json.loads(json_string)
class MyStruct:
def __init__(self, A, B, C, D, E):
self.A = A
self.B = B
self.C = C
self.D = D
self.E = E
my_struct = MyStruct(data['A'], data['B'], data['C'], data['D'], data['E'])
在这个示例中,我们首先使用 json.loads()
函数将 JSON 字符串解析为 Python 字典对象。然后,我们定义了一个名为 MyStruct
的类,它具有与 JSON 字符串中的键对应的属性。最后,我们使用解析后的数据创建了一个 MyStruct
对象。
请注意,这只是一个示例,你可以根据自己的需求进行修改和扩展。希望对你有帮助!如果你使用的是其他编程语言,可以告诉我,我可以为你提供相应的示例代码。
英文:
Say I have this json string:
{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":2,\"E\":\"e\"}
I want to convert above string into struct:
{
A string
B string
C string
D int
E string
}
Im not sure how to do that as I have do the quote and unquote but seems no success yet.
答案1
得分: 7
将您的输入字符串在解码之前进行包装,像这样:
s, err := strconv.Unquote(`"` + yourstring + `"`)
然后您可以继续进行解组操作。
英文:
Wrap your incoming string before unquoting it like this:
s,err := strconv.Unquote(`"`+yourstring+`"`)
Then you can proceed with unmarshalling it.
答案2
得分: 2
有点取巧,但输入字符串的编码方式与它在JSON对象中的编码方式相同,所以你可以这样做:
x := json.RawMessage(`"{"A":"a","B":"b","C":"c","D":2,"E":"e"}"`)
var v string
err := json.Unmarshal(x, &v)
var x MyStruct
json.Unmarshal([]byte(v), &x)
英文:
Somewhat of a hack, but the input string is how it would be encoded if it was in a JSON object, so you can do this:
x:=json.RawMessage(`"{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":2,\"E\":\"e\"}"`)
var v string
err:=json.Unmarshal(x,&v)
var x MyStruct
json.Unmarshal([]byte(v),&x)
答案3
得分: 1
你可以使用strconv
包中的Unquote
方法,就像mfathirirhas建议的那样。我创建了一个简单的代码来演示你的情况,代码如下:
package main
import (
"encoding/json"
"fmt"
"strconv"
)
type response struct {
A string
B string
C string
D int
E string
}
func main() {
str := (`"{"A":"a","B":"b","C":"c","D":2,"E":"e"}"`)
fmt.Printf(str)
s, err := strconv.Unquote(str)
fmt.Println()
fmt.Println(s, err)
var resp response
if err := json.Unmarshal([]byte(s), &resp); err != nil {
panic(err)
}
fmt.Println(resp)
}
输出结果:
"{"A":"a","B":"b","C":"c","D":2,"E":"e"}"
{"A":"a","B":"b","C":"c","D":2,"E":"e"} <nil>
{a b c 2 e}
这段代码使用Unquote
方法将字符串中的引号去除,并将其解析为一个结构体对象。然后,使用json.Unmarshal
方法将解析后的字符串转换为response
类型的对象。最后,打印出解析后的结果。
英文:
You can make use of Unquote
method of strconv
as suggested by mfathirirhas, I have created a small code depicting you scenario as follows:
package main
import (
"encoding/json"
"fmt"
"strconv"
)
type response struct {
A string
B string
C string
D int
E string
}
func main() {
str := (`"{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":2,\"E\":\"e\"}"`)
fmt.Printf(str)
s, err := strconv.Unquote(str)
fmt.Println()
fmt.Println(s, err)
var resp response
if err := json.Unmarshal([]byte(s), &resp); err != nil {
panic(err)
}
fmt.Println(resp)
}
Output:
"{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":2,\"E\":\"e\"}"
{"A":"a","B":"b","C":"c","D":2,"E":"e"} <nil>
{a b c 2 e}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论