在 GO 中解析多维数组
Parse multidimensional arrays in GO
我想在 GO 中解析多维数组
目标是将数组字符串 a 运行 反序列化到循环中以获取值。
在PHP中,我使用这个:
代码:
<?php
$x='a:2:{i:0;a:6:{s:8:"category";i:0;s:3:"url";s:0:"";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:0:"";}}i:1;a:6:{s:8:"category";i:0;s:3:"url";s:3:"jjj";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:3:"jjj";}}}';
$x = unserialize($x);
//Print Array
print_r($x);
//Parse Array
foreach ($x as $key => $value){
//commandes
echo "category is :".$x[$key]["category"]."\n";
echo "path is :".$x[$key]["PARSED"]["path"]."\n";
}
输出:
Array
(
[0] => Array
(
[category] => 0
[url] =>
[ruleid] => 0
[redirtype] => 0
[protocol] => 0
[PARSED] => Array
(
[path] =>
)
)
[1] => Array
(
[category] => 0
[url] => jjj
[ruleid] => 0
[redirtype] => 0
[protocol] => 0
[PARSED] => Array
(
[path] => jjj
)
)
)
category is :0
path is :
category is :0
path is :jjj
在 GO 中,我设法反序列化字符串,但我不知道如何 运行 循环在 php
代码:
package main
import (
"fmt"
"github.com/techoner/gophp/serialize"
)
func main() {
var line = []byte(`a:2:{i:0;a:6:{s:8:"category";i:0;s:3:"url";s:0:"";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:0:"";}}i:1;a:6:{s:8:"category";i:0;s:3:"url";s:3:"jjj";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:3:"jjj";}}}`)
out, _ := serialize.UnMarshal([]byte(line))
fmt.Println(out)
}
输出:
[map[PARSED:map[path:<nil>] category:0 protocol:0 redirtype:0 ruleid:0 url:<nil>]
map[PARSED:map[path:jjj] category:0 protocol:0 redirtype:0 ruleid:0 url:jjj]]
有人可以帮忙吗?
在 Golang 中,你没有任何未知数组或对象的解析器,你的未知数据是接口,所以首先,你应该将数据转换为数组或对象,然后循环遍历它,下面的代码将做什么你要。
func main() {
var line = []byte(`a:2:{i:0;a:6:{s:8:"category";i:0;s:3:"url";s:0:"";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:0:"";}}i:1;a:6:{s:8:"category";i:0;s:3:"url";s:3:"jjj";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:3:"jjj";}}}`)
out, _ := serialize.UnMarshal(line)
dataList := out.([]interface{})
for _, data := range dataList {
for k, v := range data.(map[string]interface{}) {
if k == "category" {
fmt.Printf("category is :%v\n", v)
} else if k == "PARSED" {
fmt.Printf("path is :%v\n", v.(map[string]interface{})["path"])
}
}
}
}
输出:
path is :<nil>
category is :0
category is :0
path is :jjj
另外,这个包没有像 json.Unmarshal
那样的任何转换方法,因此您应该根据自己的数据知识来完成。
我想在 GO 中解析多维数组
目标是将数组字符串 a 运行 反序列化到循环中以获取值。
在PHP中,我使用这个:
代码:
<?php
$x='a:2:{i:0;a:6:{s:8:"category";i:0;s:3:"url";s:0:"";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:0:"";}}i:1;a:6:{s:8:"category";i:0;s:3:"url";s:3:"jjj";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:3:"jjj";}}}';
$x = unserialize($x);
//Print Array
print_r($x);
//Parse Array
foreach ($x as $key => $value){
//commandes
echo "category is :".$x[$key]["category"]."\n";
echo "path is :".$x[$key]["PARSED"]["path"]."\n";
}
输出:
Array
(
[0] => Array
(
[category] => 0
[url] =>
[ruleid] => 0
[redirtype] => 0
[protocol] => 0
[PARSED] => Array
(
[path] =>
)
)
[1] => Array
(
[category] => 0
[url] => jjj
[ruleid] => 0
[redirtype] => 0
[protocol] => 0
[PARSED] => Array
(
[path] => jjj
)
)
)
category is :0
path is :
category is :0
path is :jjj
在 GO 中,我设法反序列化字符串,但我不知道如何 运行 循环在 php
代码:
package main
import (
"fmt"
"github.com/techoner/gophp/serialize"
)
func main() {
var line = []byte(`a:2:{i:0;a:6:{s:8:"category";i:0;s:3:"url";s:0:"";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:0:"";}}i:1;a:6:{s:8:"category";i:0;s:3:"url";s:3:"jjj";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:3:"jjj";}}}`)
out, _ := serialize.UnMarshal([]byte(line))
fmt.Println(out)
}
输出:
[map[PARSED:map[path:<nil>] category:0 protocol:0 redirtype:0 ruleid:0 url:<nil>]
map[PARSED:map[path:jjj] category:0 protocol:0 redirtype:0 ruleid:0 url:jjj]]
有人可以帮忙吗?
在 Golang 中,你没有任何未知数组或对象的解析器,你的未知数据是接口,所以首先,你应该将数据转换为数组或对象,然后循环遍历它,下面的代码将做什么你要。
func main() {
var line = []byte(`a:2:{i:0;a:6:{s:8:"category";i:0;s:3:"url";s:0:"";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:0:"";}}i:1;a:6:{s:8:"category";i:0;s:3:"url";s:3:"jjj";s:6:"ruleid";i:0;s:9:"redirtype";i:0;s:8:"protocol";i:0;s:6:"PARSED";a:1:{s:4:"path";s:3:"jjj";}}}`)
out, _ := serialize.UnMarshal(line)
dataList := out.([]interface{})
for _, data := range dataList {
for k, v := range data.(map[string]interface{}) {
if k == "category" {
fmt.Printf("category is :%v\n", v)
} else if k == "PARSED" {
fmt.Printf("path is :%v\n", v.(map[string]interface{})["path"])
}
}
}
}
输出:
path is :<nil>
category is :0
category is :0
path is :jjj
另外,这个包没有像 json.Unmarshal
那样的任何转换方法,因此您应该根据自己的数据知识来完成。