這是我的網址。
?start=0&count=30&continue=true&filter[prod_type_category]=asdf&filter[lable_size_inc]=&;filter[inch]=12&;filter[lable_size_mm]=&;filter[reference]=
我的預期結果只針對filter的鍵名和值
filter_name=prod_type_category, lable_size_inc, inch, lable_size_mm, reference
filter_value=asdf, , 12, ,
我試著用regex和回圈來獲取鍵名和值來提取
re := regexp.MustCompile("/[([^]] )]"/span>)
txt := "data?start=0&count=30&continue=true&filter[prod_type_category]=oc&filter[lable_size_inc]=&filter[inch]=&filter[lable_size_mm]=&;filter[reference]="/span>
split := re.Split(txt, -1)
set :=[]string{}。
for i := range split {
set = append(set, split[i])
}
fmt.Println(set)
uj5u.com熱心網友回復:
你可以使用標準的go包來決議這個url:
import (
"fmt"/span>
"net/url"/span>
)
func main(){
txt := "http://example.com/data?start=0&count=30&continue=true&filter[prod_type_category]=oc&filter[lable_size_inc]=&filter[inch]=&filter[lable_size_mm]=&;filter[reference]="/span>
u, err :=url.Parse(txt)
if err != nil {
panic(err)
}
m, _ := url.ParseQuery(u.RawQuery)
fmt.Println(m)
}
注意,我做了txt一個完整的url來傳遞給url.Parse方法。這將導致:
map[continue:[true] count: [30] filter[inch]:[] filter[lable_size_inc]:[] filter[lable_size_mm]:[] filter[prod_type_category]:[oc] filter[reference]:[] start:[0] ]
這是一個以你的所有引數為鍵的地圖,但它還沒有處理[]的引數。所以你可以遍歷這個地圖,提取另一個帶有這些引數的地圖:
re := regexp.MustCompile(`filter[(.*)]`)
filter := make(map[string] []string)
for k,v := range(m) {
if re.MatchString(k) {
matches := re.FindAllStringSubmatch(k,2)
filterKey := matches[0][1]
filter[filterKey] = v
}
}
fmt.Println(filter)
然后你會得到
map[inch:[] lable_size_inc:[] lable_size_mm:[] prod_type_category:[oc] reference:[] ]
這只是一個讓你開始的例子,并不能很好地概括,也沒有考慮到重復鍵。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/332394.html
標籤:
