【问题标题】:Group/combine json array by key按键分组/组合json数组
【发布时间】:2016-03-11 21:09:54
【问题描述】:

我该如何打开它(完整的 json 如下所示,但每 5 分钟就会出现一个新的时间戳)。我一次提取一整天的数据

[
{
  "Timestamp":"2016-03-11T14:40:00+00:00",
  "Point":"ategho-leg_1-8",
  "Value":"487.0"
},
{
  "Timestamp":"2016-03-11T14:40:00+00:00",
  "Point":"ategho-leg_2-8",
  "Value":"488.0"
},
{
  "Timestamp":"2016-03-11T14:40:00+00:00",
  "Point":"ategho-leg_3-8",
  "Value":"484.0"
},
{
  "Timestamp":"2016-03-11T14:40:00+00:00",
  "Point":"ategho-temperature_long-8",
  "Value":"466.0"
},
{
  "Timestamp":"2016-03-11T14:40:00+00:00",
  "Point":"ategho-temperature_short-8",
  "Value":"198.0"
},
{
  "Timestamp":"2016-03-11T14:45:00+00:00",
  "Point":"ategho-leg_1-8",
  "Value":"487.0"
},
{
  "Timestamp":"2016-03-11T14:45:00+00:00",
  "Point":"ategho-leg_2-8",
  "Value":"488.0"
},
{
  "Timestamp":"2016-03-11T14:45:00+00:00",
  "Point":"ategho-leg_3-8",
  "Value":"484.0"
},
{
  "Timestamp":"2016-03-11T14:45:00+00:00",
  "Point":"ategho-temperature_long-8",
  "Value":"466.0"
},
{
  "Timestamp":"2016-03-11T14:45:00+00:00",
  "Point":"ategho-temperature_short-8",
  "Value":"198.0"
},
{
  "Timestamp":null,
  "Point":null,
  "Value":null
}
]

进入这个:

[
{
  "Timestamp":"2016-03-11T14:40:00+00:00",
  "ategho-leg_1-8" : "487.0",
  "ategho-leg_2-8" : "488.0",
  "ategho-leg_3-8" : "484.0",
  "ategho-temperature_long-8" : "466.0",
  "ategho-temperature_short-8" : "198.0"
},
{
  "Timestamp":"2016-03-11T14:45:00+00:00",
  "ategho-leg_1-8" : "487.0",
  "ategho-leg_2-8" : "488.0",
  "ategho-leg_3-8" : "484.0",
  "ategho-temperature_long-8" : "466.0",
  "ategho-temperature_short-8" : "198.0"
}
]

这是我尝试过的,但它不起作用

 $datas = json_decode($morris, true);
$out = [];

foreach($datas as $element) {
    $out[$element['Timestamp']][] = ['Date' => $element['Timestamp'], 
  'Point' => $element['Point'], 'Value' => $element['Value']];
 }

$thing = json_encode($out);

输出:

{
"2016-03-11T14:40:00+00:00":[
  {
     "Timestamp":"2016-03-11T14:40:00+00:00",
     "Point":"ategho-leg_1-8",
     "Value":"487.0"
  },
  {
     "Timestamp":"2016-03-11T14:40:00+00:00",
     "Point":"ategho-leg_2-8",
     "Value":"488.0"
  },
  {
     "Timestamp":"2016-03-11T14:40:00+00:00",
     "Point":"ategho-leg_3-8",
     "Value":"484.0"
  },
  {
     "Timestamp":"2016-03-11T14:40:00+00:00",
     "Point":"ategho-temperature_long-8",
     "Value":"466.0"
  },
  {
     "Timestamp":"2016-03-11T14:40:00+00:00",
     "Point":"ategho-temperature_short-8",
     "Value":"198.0"
  }
 ],

【问题讨论】:

    标签: php json csv


    【解决方案1】:

    应该是这样的:

    foreach ($datas as $element) {
        $out["Timestamp"] = $element["Timestamp"];
        $out[$element["Point"]] = $element["Value"];
    }
    

    我拿走了你的数据:

    $r = '[
    {
      "Timestamp":"2016-03-11T14:40:00+00:00",
      "Point":"ategho-leg_1-8",
      "Value":"487.0"
    },
    {
      "Timestamp":"2016-03-11T14:40:00+00:00",
      "Point":"ategho-leg_2-8",
      "Value":"488.0"
    },
    {
      "Timestamp":"2016-03-11T14:40:00+00:00",
      "Point":"ategho-leg_3-8",
      "Value":"484.0"
    },
    {
      "Timestamp":"2016-03-11T14:40:00+00:00",
      "Point":"ategho-temperature_long-8",
      "Value":"466.0"
    },
    {
      "Timestamp":"2016-03-11T14:40:00+00:00",
      "Point":"ategho-temperature_short-8",
      "Value":"198.0"
    }
    ]';
    $datas = json_decode($r, true);
    $out = [];
    
    foreach ($datas as $element) {
        $out["Timestamp"] = $element["Timestamp"];
        $out[$element["Point"]] = $element["Value"];
    }
    
    echo '<pre>',print_r($out),'</pre>';
    

    输出是:

    Array
    (
        [Timestamp] => 2016-03-11T14:40:00+00:00
        [ategho-leg_1-8] => 487.0
        [ategho-leg_2-8] => 488.0
        [ategho-leg_3-8] => 484.0
        [ategho-temperature_long-8] => 466.0
        [ategho-temperature_short-8] => 198.0
    )
    

    这意味着你没有提供足够的信息。

    【讨论】:

    • 输出:{"Timestamp":null,"ategho-leg_1-8":null,"ategho-leg_2-8":null,"ategho-leg_3-8":null,"ategho- temperature_long-8":null,"ategho-temperature_short-8":null,"":null} 。关闭但不完全
    • 我删除了额外的$element。立即检查。
    • 只填写一次,不会对所有数据重复。 "Timestamp" 读取为 null,最后 ":null 仍然存在 {"Timestamp":null,"ategho-leg_1-8":"490.0","ategho-leg_2-8":"492.0","ategho- leg_3-8":"488.0","ategho-temperature_long-8":"460.0","ategho-temperature_short-8":"72.0","":null}
    • 我再看一遍,但我在给你的数据中看不到任何错误。感谢回复
    • @keaner 你坚持使用sloppy questions: u_mulder 答案是正确的,是你的示例代码/期望的结果是错误的(在编辑之前)。您必须注意询问。如果我有点粗鲁,我很抱歉。
    猜你喜欢
    • 2016-06-24
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2016-01-10
    • 2017-11-06
    • 1970-01-01
    相关资源
    最近更新 更多