将字符串解析为映射Golang

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)

two*_*two 9

也许你真正想要的是解析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 将迭代你分裂的部分.
  • Java代码似乎依赖于正则表达式来修剪空间.Go Split不会使用它们,但strings.TrimSpace会做你喜欢的事情(特别是从两边剥离各种Unicode空白).

我将离开实际的实现给你,但也许这些指针可以让你开始.


Pet*_*ias 7

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)

这将做你想要的.