为了账号安全,请及时绑定邮箱和手机立即绑定

从 MySQL/PHP 修复 JSON 格式

从 MySQL/PHP 修复 JSON 格式

PHP
人到中年有点甜 2022-05-27 16:54:41
在下面的两个版本的代码中,第一个产生结果,但请注意“文本”数组的末尾没有结束括号,因为应该有。来自其他代码示例的第二个输出看起来应该可以工作,但它完全失败了。我哪里做错了?当我这样做时;foreach($db_found->query($sql) as $row) {        $json_array[] =             array('start_date' =>                 array('minute' => $row[min], 'hour' => $row[hour],                     'month' => $row[mo], 'day' => $row[day], 'year' => $row[yr]),              'text' =>                 array('text'  => $row[text],              'group' =>                array('group' => $row[callsign])))        ;     }$data = array("events" =>  $json_array);  echo json_encode($data);我明白了:    {   "events":[      {         "start_date":{            "minute":"42",            "hour":"18",            "month":"11",            "day":"11",            "year":"2019"         },         "text":{            "text":"BILL SWEENEY Opened the net from 65.255.143.178 on 146.655MHz, PL94.8Hz",            "group":{               "group":"W0WTS"            }         }      },      {         "start_date":{            "minute":"42",            "hour":"18",            "month":"11",            "day":"11",            "year":"2019"         },         "text":{            "text":"Peculiar: Clear, 19.9F, wind: N @ 15, humidity: 54%",            "group":{               "group":"GENCOMM"            }         }      }   ]}
查看完整描述

2 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

因此,我首先美化您的 JSON 和 PHP,然后重新格式化您的代码,以便更容易理解所需的数据层次结构以及编码的数据层次结构。这是重新格式化:


<?php

foreach ($db_found->query($sql) as $row) {

    $json_array[] = 

    [

        'start_date' => 

        [

            'minute' => $row['min'],

            'hour' => $row['hour'],

            'month' => $row['mo'],

            'day' => $row['day'],

            'year' => $row['yr']

        ],

        'text' => 

        [

            'text' => $row['text'],

            'group' => 

            [

                'group' => $row['callsign']

            ]

        ]

    ];

}

$data = ["events" => $json_array];

echo json_encode($data);


?>

您可以看到“组”数组位于“文本”数组内。在重新格式化您想要的 JSON 之后,我认为这就是您要寻找的内容:


以及产生我认为您正在寻找的输出的代码:


<?php

foreach ($db_found->query($sql) as $row) {

    $data["events"][] = 

    [

        'start_date' => 

        [

            'minute' => $row['min'],

            'hour' => $row['hour'],

            'month' => $row['mo'],

            'day' => $row['day'],

            'year' => $row['yr']

        ],

        'text' => 

        [

            'text' => $row['text']

        ],

        'group' => 

        [

            'group' => $row['callsign']

        ]

    ];

}


echo json_encode($data);


?>

笔记:

  • 我选择了这种特殊的格式,因为它是理解层次结构的最简单方法。通常我不会[像那样把它放在自己的线上,但在这种情况下它更容易处理。

  • 我选择[]了数组定义,array()因为它的视觉噪音要少得多,因此更容易理解

  • $data["events"][] =在循环中使用了,因为我认为它使您定义的数据更加清晰。或者,我可能会这样做,$events[] =或者$eventsJson[] =让变量清楚地表明它应该持有什么信息,然后执行$data=['events'=>$eventsJson];

  • $row[string]不向前兼容。见https://www.php.net/manual/en/language.types.array.php#language.types.array.foo-bar


查看完整回答
反对 回复 2022-05-27
?
达令说

TA贡献1821条经验 获得超6个赞

试试这个代码块


     $json_array[] = 


            array(

                  'start_date' => 

                               array(

                                    'minute' => $row[min], 

                                    'hour' => $row[hour], 

                                    'month' => $row[mo], 

                                    'day' => $row[day], 

                                    'year' => $row[yr]

                                  ),

                   'text' => 

                           array('text'  => $row[text]), // this is the change

                   'group' =>

                           array('group' => $row[callsign]) // so here matching bracket must be maintain 

               ); 

OUTP 结构是您想要的带有空数据的结构,因为我没有循环数据


{

  "events": [

    {

      "start_date": {

        "minute": null,

        "hour": null,

        "month": null,

        "day": null,

        "year": null

      },

      "text": {

        "text": null

      },

      "group": {

        "group": null

      }

    }

  ]

}


查看完整回答
反对 回复 2022-05-27
  • 2 回答
  • 0 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号