我查詢PostgreSQL中3表和結果轉換成嵌套JSON對象。我使用PHP(和Slim框架)作爲我的應用程序代碼。我能夠使用PostgreSQL的內置json運算符返回一個有效的嵌套JSON對象。但是,我無法在PHP中渲染該JSON對象。顯示的PostgreSQL JSON在PHP
PHP的json_encode運算符似乎試圖對提供的obect(已經是JSON格式)執行JSON轉換。 我無法讓PHP簡單地回顯,打印(或打印出)PostgreSQL提供的有效結果。 PHP不斷增加額外的字符,結果....我已經試過:
- (一)不使用PostgreSQL的JSON運營商,
- (b)使用PHP的json_decode使用json_encode之前,
- (三)只運行回聲和print_r的聲明,並
- (d)我剛開始使用str_replace函數來去除多餘的字符玩弄,但開始感覺到scuzzy ...
我敢我確定做明顯錯誤的事情。我只是在這一個停滯。任何幫助是極大的讚賞!
3個表格是: 1.公司 2.聯繫 3.產品圖
CONTACT> ----(:COMPANY_ID)-----公司----(:COMPANY_ID )----- < PIC
(一個公司可以有多個聯繫人,可以有很多圖片...沒有關係的b/W的接觸和PIC表)
這裏PHP代碼,它使用PostgreSQL查詢:
<?php
$app->get('/companies/{id}', function($request)
{
$db = pg_connect("host=localhost dbname=cool_db_name user=postgres")
or die('Could not connect: ' . pg_last_error());
$id = $request->getAttribute('id');
$query = "
SELECT row_to_json(t)
FROM (
SELECT company_id, company_name, company_street, company_city, company_state, company_zip, active_ind
, (
SELECT array_to_json(array_agg(row_to_json(c)))
FROM (
SELECT ct.contact_id, ct.contact_lname, ct.contact_fname, ct.contact_email, ct.active_ind
FROM contact ct
WHERE ct.company_id = c.company_id
ORDER by ct.contact_lname
) c
) AS contacts
, (
SELECT array_to_json(array_agg(row_to_json(p)))
FROM (
SELECT p.pic_id, p.pic_location, p.active_ind
FROM pic p
WHERE p.company_id = c.company_id
AND p.active_ind = 1
ORDER by p.pic_id
) p
) AS pics
FROM company c
WHERE c.alive_ind = 1 AND c.company_id = " . $id . "
) t
;";
$result = pg_query($db, $query);
while($row = pg_fetch_assoc($result))
{
$data[] = $row;
}
if(isset($data))
{
header('Content-Type: application/json');
echo json_encode($data);
}
});
1同樣地,如果餘運行本身PostgreSQL的查詢,其結果是有效的JSON(下圖):
{ 「COMPANY_ID」 :1, 「COMPANY_NAME」: 「公司#1」, 「company_street」: 「111樂大道」, 「company_city」: 「的Creve心」, 「company_state」: 「MO」, 「company_zip」:「 10002「, 」active_ind「:1, 「接觸」:[{ 「CONTACT_ID」:1, 「contact_lname」: 「菲吉斯」, 「contact_fname」: 「西里爾」, 「CONTACT_EMAIL」: 「[email protected]」, 「active_ind」:1 },{ 「contact_id」:2, 「contact_lname」:「Kane」, 「contact_fname」:「Lana」, 「contact_email」:「lana @ gmail。COM」, 「active_ind」:1 },{ 「CONTACT_ID」:3, 「contact_lname」: 「Tunt」, 「contact_fname」: 「謝麗爾」, 「CONTACT_EMAIL」: 「[email protected]」 , 「active_ind」:1 }], 「圖片」:[{ 「pic_id」:1, 「pic_location」: 「簡檔/ pic_900.jpg」, 「active_ind」:1 },{ 「 pic_id「:2, 」pic_location「:」profile/pic_901.jpg「, 」active_ind「:1 },{ 」pic_id「:3, 」pic_location「:」profile/pic_902.jpg「 , 「active_ind」:1 },{ 「pic_id」:4, 「pic_location」: 「簡檔/ pic_903.jpg」, 「active_ind」:1 }] }
(抱歉窮人格式...它看起來在jsonlint.com更好)
2. ......但是當我運行PHP應用程序中我得到以下結果(WEIRD JSON)相同的查詢:
[{「row_to_json」: 「{\」company_id \「:1,\」company_name \「:\」Company#1 \「,\」company_street \「:\」111 Fun Ave \「,\」company_city \「:\」Creve Coeur \ ,\ 「company_state \」:\ 「MO \」,\ 「company_zip \」:\ 「10002 \」,\ 「active_ind \」:1,\ 「聯繫人\」:[{\ 「CONTACT_ID \」:1,\ 「contact_lname \」:\ 「菲吉斯\」,\ 「contact_fname \」:\ 「西里爾\」,\ 「CONTACT_EMAIL \」:\ 「[email protected] \」,\ 「active_ind \」:1},{\ 「CONTACT_ID \」:2,\ 「contact_lname \」:\ 「凱恩\」,\ 「contact_fname \」:\ 「拉納\」,\ 「CONTACT_EMAIL \」:\ 「[email protected] \」,\「active_ind \ 「:1},{\」 CONTACT_ID \ 「:3,\」 contact_lname \ 「:\」 Tunt \ 「\ 」contact_fname \「:\ 」謝麗爾\「,\ 」CONTACT_EMAIL \「:\」 瘋狂@的Gmail .COM \ 「\ 」active_ind \「:1}],\ 」圖片\「:[{\ 」pic_id \「:1,\ 」pic_location \「:\ 」簡檔/ pic_900.jpg \「,\」 active_ind \ 「:1},{\」 pic_id \ 「:2,\」 pic_location \ 「:\」 簡檔/ pic_901.jpg \」,\ 「active_ind \」:1},{\ 「pic_id \」:3,\ 「pic_location \」:\ 「簡檔/ pic_902.jpg \」,\ 「active_ind \」:1},{\ 「pic_id \」:4,\ 「pic_location \」:\ 「簡檔/ pic_903.jpg \」,\ 「active_ind \」:1}]}「}}
就像我說的,我現在虧本了。任何幫助將不勝感激。謝謝!
儘管這段代碼可以解決這個問題,[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers )真的有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! –