修改从PDO和PHP生成的json

修改从PDO和PHP生成的json,php,mysql,json,Php,Mysql,Json,我会很快地进行更多的无代码对话 我有一个mySQL数据库,我想用PHP和PDO从中生成json <?php require("db.php"); $dsn = "mysql:host=localhost;dbname=$dbname"; $pdo = new PDO($dsn, $username, $password); $rows = array(); $stmt = $pdo->prepare("SELECT * FROM table"); $stmt->

我会很快地进行更多的无代码对话

我有一个mySQL数据库,我想用PHP和PDO从中生成json

<?php
require("db.php");
$dsn = "mysql:host=localhost;dbname=$dbname";
$pdo = new PDO($dsn, $username, $password);
$rows = array();
    $stmt = $pdo->prepare("SELECT * FROM table");
    $stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo '{"jsons":';
echo json_encode($rows);
echo "}";
?>
我想修改php代码,这样我的json输出将

{"jsons":[{"date_time":"2012-09-06 20:55:44","name":"theOne","message":"i am god","ip":"","devs":{"device":"HTC","device_type":"Phone","class":"class1","id":"1"}}]}
区别在于我想将
设备
设备类型
id
嵌套到devs中

我什么也做不到,也无法从谷歌上找到这样的任务

任何帮助都将不胜感激


谢谢。

$rows=$stmt->fetchAll(PDO::FETCH\u ASSOC)之后运行此块行:

foreach ($rows as $key => $row) {
    foreach ($row as $column => value) {
        if ($column == 'device' || $column == 'device_type' || $column == 'class' || $column == 'id') {
            $row[$key]['devs'][$column] = $value;
        } else {
            $row[$key][$column] = $value;
        }
    }
}

在继续编码为JSON之前,这将在每行的“devs”键下嵌套值。

$rows=$stmt->fetchAll(PDO::FETCH\u ASSOC)之后运行此块行:

foreach ($rows as $key => $row) {
    foreach ($row as $column => value) {
        if ($column == 'device' || $column == 'device_type' || $column == 'class' || $column == 'id') {
            $row[$key]['devs'][$column] = $value;
        } else {
            $row[$key][$column] = $value;
        }
    }
}
$push_in_devs = array("device","device_type","class","id") ;
$old_set = json_decode('{"jsons":[{"date_time":"2012-09-06 20:55:44","name":"theOne","message":"i am god","ip":"","device":"HTC","device_type":"Phone","class":"class1","id":"1"}]}') ;
$old_object = $old_set->jsons[0] ;

$new_set = new STDClass() ;
$new_set->jsons = array(0 => new STDClass) ;
$new_object = $new_set->jsons[0] ;

foreach($old_object as $name => $value){
  if (!in_array(strtolower($name), $push_in_devs))
    $new_object->$name = $value ;
}

$new_object->devs = array() ;

$dev = array() ;
foreach($push_in_devs as $name){
  $dev[$name] = $old_object->$name ;
}

$new_object->devs[] = $dev ;


echo json_encode($new_set) ;

这将在继续编码到JSON之前,为每一行在“devs”键下嵌套值。

Parse error:syntax error,unexpected'),在文件第16行(foreach($row as$column=>value){)中应为T_PAAMAYIM_NEKUDOTAYIM,在文件第16行(foreach)中应为T_PAAMAYIM_NEKUDOTAYIM($row as$column=>value){)给我一个空白输出。我在$rows=$stmt->fetchAll(PDO::FETCH_ASSOC)之后插入了你的代码,并删除了我的最后3行。给我一个空白输出。我在$rows=$stmt->fetchAll(PDO::FETCH_ASSOC)之后插入了你的代码,并删除了我的最后3行。我的输出(json部分)没有问题。无法删除输出前面的字符串(169)。字符串(169){“jsons”:[{“日期时间”:“2012-09-06 20:55:44”,“姓名”:“theOne”,“消息”:“我是上帝”,“ip”:“,”devs:[{“设备”:“HTC”,“设备类型”:“电话”,“类”:“class1”,“id”:“1”}]}]}“工作得很有魅力。很难打败!谢谢Jari,谢谢大家!我的输出(json部分)正常。无法删除输出前面的字符串(169)。字符串(169)“{”jsons:[{”日期时间“:“2012-09-06 20:55:44”,“名称“:”theOne“,”消息“:”我是上帝“,”ip“,”开发人员“:[{”设备“:”HTC“,”设备类型“:”手机“,”类“,”id“:”1“}]}]”工作起来很有魅力。这很难打败!谢谢Jari,谢谢大家!
$push_in_devs = array("device","device_type","class","id") ;
$old_set = json_decode('{"jsons":[{"date_time":"2012-09-06 20:55:44","name":"theOne","message":"i am god","ip":"","device":"HTC","device_type":"Phone","class":"class1","id":"1"}]}') ;
$old_object = $old_set->jsons[0] ;

$new_set = new STDClass() ;
$new_set->jsons = array(0 => new STDClass) ;
$new_object = $new_set->jsons[0] ;

foreach($old_object as $name => $value){
  if (!in_array(strtolower($name), $push_in_devs))
    $new_object->$name = $value ;
}

$new_object->devs = array() ;

$dev = array() ;
foreach($push_in_devs as $name){
  $dev[$name] = $old_object->$name ;
}

$new_object->devs[] = $dev ;


echo json_encode($new_set) ;