【问题标题】:Convert Hierarchical Data to JSON tree using PHP使用 PHP 将分层数据转换为 JSON 树
【发布时间】:2015-04-17 06:09:25
【问题描述】:

我有PostgreSQL函数(树形结构),我需要将输出转换为json树格式。

我的PostgreSQL 函数

RETURN QUERY
WITH RECURSIVE manger_hierarchy(e_id,e_name,m_name,m_id) AS 
(
    SELECT 
        e.emp_id,e.emp_name,
        m.emp_name AS man_name,e.emp_man_id 
    FROM emp_det e 
    LEFT JOIN emp_det m ON e.emp_man_id=m.emp_id
    WHERE e.emp_id = id
    UNION
    SELECT 
        rp.emp_id,rp.emp_name,
        mh.e_name AS manager,rp.emp_man_id
    FROM manger_hierarchy mh
    INNER JOIN emp_det rp ON mh.e_id = rp.emp_man_id
)
SELECT h.e_id,h.e_name,h.m_name,h.m_id
FROM manger_hierarchy h;

而我的php 脚本是

header('Content-Type: application/json'); $dbconn=pg_connect('host=localhost port=5432 dbname=test1 user=someuser password=somepass'); $x=$_GET['id']; $result=pg_query($dbconn,"SELECT * FROM employe_manager_details($x)"); $y=pg_fetch_all($result); echo json_encode($y, JSON_PRETTY_PRINT); pg_close($dbconn);

我目前的结果 [ { "e_id": "4", "e_name": "john", "e_manager": "steve", "e_man_id": "2" }, { "e_id": "8", "e_name": "jake", "e_manager": "john", "e_man_id": "4" }, { "e_id": "9", "e_name": "wilson", "e_manager": "john", "e_man_id": "4" } ] 期待结果

[ { "e_id": "4", "e_name": "john", "e_manager": "steve", "e_man_id": "2" }, { "e_id": "8", "e_name": "jake", "e_manager": "john", "e_man_id": "4" }, { "e_id": "9", "e_name": "wilson", "e_manager": "john", "e_man_id": "4" } ]

【问题讨论】:

  • 两者的结果有什么不同,不是一样
  • 您能否指出您当前和预期结果的确切差异在哪里?
  • 我需要 joson 树输出.. e_id 4 有两个孩子.. 孩子们应该是有意的

标签: php json postgresql


【解决方案1】:

我猜你把它渲染成 html。那是对的吗?将输出包装在<pre></pre> 标签中。

试试这个:

echo '<pre>'.json_encode($y, JSON_PRETTY_PRINT).'</pre>';

【讨论】:

  • 我认为您的查询有问题。我目前没有时间弄清楚,但是无论您从数据库返回什么都不是您所期望的,因此 json_encode 没有返回您所期望的。
【解决方案2】:

多年来没有接触过 pgsql,所以不确定是否有一个函数可以获取由给定列的值键入的返回数据。但是所有结果都在一个 php 变量中,你可以这样做:

$results = pg_fetch_all($result);
$ordered_results = array();
foreach ($results as $result) {
  $ordered_results[$result['e_man_id']][] = $result;
}
echo json_encode($ordered_results, JSON_PRETTY_PRINT);

这将包括返回的第一级 json 中的“e_man_id”值,并且值将按照您的描述嵌套。

我不知道 json_encode() 中有任何选项可以让您自动执行此操作。

【讨论】:

  • 对不起,我没有得到预期的结果,谢谢考虑
猜你喜欢
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2011-05-18
  • 1970-01-01
相关资源
最近更新 更多