繁体   English   中英

php 改变结构 object / json

[英]php change structure of object / json

I am working with laravel and angular and I am trying to add some charts, now I need to get data in a specific structure for the chart plugin, currently my api returns a json like this one below:

"data": {
    "enero": {
      "value": 50
    },
    "febrero": {
      "value": 130
    },
    "marzo": {
      "value": 220
    },
    "abril": {
      "value": 440
    },
    "mayo": {
      "value": 700
    },
    "junio": null,
    "julio": null,
    "agosto": null,
    "septiembre": null,
    "octubre": null,
    "noviembre": null,
    "diciembre": null
}

预期 output:

"data": [
            {
                "value": "50"
            },
            {
                "value": "130"
            },
            {
                "value": "220"
            },
            {
                "value": "440"
            },
            {
                "value": "700"
            },
            {
                "value": null
            },
            {
                "value": null
            },
            {
                "value": null
            },
            {
                "value": null
            },
            {
                "value": null
            },
            {
                "value": null
            },
            {
                "value": null
            }
        ]

在这里,我们使用array_map收集所需的输出。

在此处尝试此代码段

<?php

$string='{"data": {
    "enero": {
      "value": 50
    },
    "febrero": {
      "value": 130
    },
    "marzo": {
      "value": 220
    },
    "abril": {
      "value": 440
    },
    "mayo": {
      "value": 700
    },
    "junio": null,
    "julio": null,
    "agosto": null,
    "septiembre": null,
    "octubre": null,
    "noviembre": null,
    "diciembre": null
}
}';
$result=array_map(function($value){
    return is_array($value) ? array("value"=>$value["value"]) : array("value"=>$value);
}, json_decode($string,true)["data"]);
$newResult["data"]=array_values($result);
echo json_encode($newResult,JSON_PRETTY_PRINT);

输出:

{
    "data": [
        {
            "value": 50
        },
        {
            "value": 130
        },
        {
            "value": 220
        },
        {
            "value": 440
        },
        {
            "value": 700
        },
        {
            "value": null
        },
        {
            "value": null
        },
        {
            "value": null
        },
        {
            "value": null
        },
        {
            "value": null
        },
        {
            "value": null
        },
        {
            "value": null
        }
    ]
}
$data = []; // new array
foreach($oldArray['data'] as $key => $value){
  $data['data'][]['value'] = $value['value'];
}

尝试在循环中访问value时,Null 合并为 null。

代码:(演示

$result = [];
foreach (json_decode($json)->data as $v) {
    $result['data'][]['value'] = $v->value ?? null;
}
echo json_encode($result, JSON_PRETTY_PRINT);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM