Bra*_*n S 6 parsing dictionary go
我有一个像A = B&C = D&E = F的字符串,如何在golang中将其解析为map?
这是关于Java的示例,但我不明白这一split
部分
String text = "A=B&C=D&E=F";
Map<String, String> map = new LinkedHashMap<String, String>();
for(String keyValue : text.split(" *& *")) {
String[] pairs = keyValue.split(" *= *", 2);
map.put(pairs[0], pairs.length == 1 ? "" : pairs[1]);
}
Run Code Online (Sandbox Code Playgroud)
也许你真正想要的是解析HTTP查询字符串,并url.ParseQuery
做到这一点.(更确切地说,它返回的是为每个键url.Values
存储一个[]string
,因为URL有时每个键有多个值.)它执行像解析HTML转义(%0A
等等)之类的事情.如果您在源代码中url.go
搜索,可以找到它的实现.
但是,如果你真的想只是各执&
和=
像Java代码一样,有围棋类似物对所有的理念和工具有:
map[string]string
是Go的模拟 Map<String, String>
strings.Split
可以&
为你分手.SplitN
限制拆分的部分数量,就像split()
Java中的双参数版本一样.请注意,可能只有一个部分,因此您应该len(pieces)
在尝试访问之前进行检查pieces[1]
.for _, piece := range pieces
将迭代你分裂的部分.Split
不会使用它们,但strings.TrimSpace
会做你喜欢的事情(特别是从两边剥离各种Unicode空白).我将离开实际的实现给你,但也许这些指针可以让你开始.
import ( "strings" )
var m map[string]string
var ss []string
s := "A=B&C=D&E=F"
ss = strings.Split(s, "&")
m = make(map[string]string)
for _, pair := range ss {
z := strings.Split(pair, "=")
m[z[0]] = z[1]
}
Run Code Online (Sandbox Code Playgroud)
这将做你想要的.