golang 如何解析php serialize 序列化的数据

1.我需要在golang中解析php 序列化生成的字符串
初步想法是将其解析成json字符串,然后再获取具体的值,
用了一个php_serialize包来解析,但是在解析之后得到了一个interface{}类型的结果
我不知道该如何解析这个interface{}

2.示例代码:

package main

import (
    "github.com/yvasiyarov/php_session_decoder/php_serialize"
    "fmt"
)

func main() {
    str := `a:3:{s:4:"name";s:3:"tom";s:3:"age";s:2:"23";s:7:"friends";a:2:{i:0;a:1:{s:4:"name";s:5:"jerry";}i:1;a:1:{s:4:"name";s:4:"jack";}}}`
    decoder := php_serialize.NewUnSerializer(str)
    if result, err := decoder.Decode(); err != nil {
        panic(err)
    } else {
        fmt.Println(result)
    }
}

打印结果:

map[name:tom age:23 friends:map[0:map[name:jerry] 1:map[name:jack]]]

3.这个result是一个 php_serialize.PhpValue 的类型,查看源码后发现这个PhpValue 是一个interface{}类型。

现在我想拿到result内部的详细数据,比如nameagefriends什么的,不知道该怎么做了,求教

千巷猫影
浏览 631回答 4
4回答

慕莱坞森

golang不了解, 但不同语言之间交互, 不要用语言专用的数组结果吧. 用xml, json, 都是php serialize好. 我猜解出来的应该是一个map结果

倚天杖

根据json格式定义一个struct,例如 type Person struct{}, 然后进行类型断言: if persons, ok := result.([]Person); ok { for _, p := range persons { fmt.Println(p) } }
打开App,查看更多内容
随时随地看视频慕课网APP