首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >规则-“非嵌套”json字段

规则-“非嵌套”json字段
EN

Stack Overflow用户
提问于 2019-10-02 04:21:25
回答 1查看 122关注 0票数 1

我有一个模型字段("data"),它映射到一个json MYSQL字段,如下所示:

代码语言:javascript
运行
复制
class Person {

    /** @Id @Column(type="integer", name="person_id") @GeneratedValue **/
    protected $id;

    /** @Column(type="json") **/
    protected $data;

    /** @Column(type="string") **/
    protected $name;

}

我可以查询和序列化Person,但数据字段是嵌套的:

代码语言:javascript
运行
复制
$person = $personRepository->find(11);
echo $serializer->serialize($person, 'json');
//returns {"id": 11, "name": "Daniel", "data": {"age": 57, "city": "Omaha"} }

我想取消data字段的嵌套,这样它就可以进行内联序列化。

代码语言:javascript
运行
复制
//returns {"id": 11, "name": "Daniel", "age": 57, "city": "Omaha"}

这个是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-10-02 15:28:22

我在这里看到了不同的解决方案,从非常脏到“嗯,没关系”。

所有不是很脏的解决方案(比如字符串替换大括号之类的东西),都在规范化的数组上工作:

代码语言:javascript
运行
复制
$array = $serializer->normalize($person);
/** add code, that turns $array into flattened version $flattened */
$json = $serializer->encode($flattened, 'json');

现在,拉平数组的代码是什么.例如:

代码语言:javascript
运行
复制
// if this is done in a loop, this, $flattened should be reinitialized every iteration!!!
$flattened = []; 
array_walk_recursive($array, function($value, $key) use (&$flattened) {
    $target[$key] = $value;
});
// $flattened contains the flattened array

不过,这是一个稍微长一点的版本:

代码语言:javascript
运行
复制
// define somewhere outside of loop
function flatten($array, $flattened = []) {
    foreach($array as $key => $value) {
        if(is_array($value)) {
            $flattened = flatten($value, $flattened);
        } else {
            $flattened[$key] = $value;
        }
    }
    return $flattened;
}

// call flatten
$flattened = flatten($array);

一个非常奇妙的解决方案是,将所有这些集成到您的自定义编码器中,扩展json编码器,但我想这已经太过分了。

还请注意,这在很多情况下都会中断,因为键可以被重写,它不能应用于对象数组而不迭代它们,它可能会对嵌套对象产生不想要的结果,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58191760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档