2012-06-22 31 views
4

我有一个看起来像这样的功能。如何在PHP中创建json返回?

function startChatSession($items) { 


    foreach ($test as $chatbox => $void) { 
      $items .= $this->chatBoxSession($chatbox); 
     } 

    if ($items != '') { 
     $items = substr($items, 0, -1); 
    } 

    header('Content-type: application/json'); 
    ?> 
    { 
     "username": "<?php echo $_SESSION['username'];?>", 
     "items": [ 
      <?php echo $items;?> 
     ] 
    } 

    <?php 
    exit(0); 
} 

我对这个功能的第二部分感兴趣。我想把它翻译成sometihng像:

echo json_encode(array(
      'username'=>$_SESSION['username'], 
      'items'=>$items 
     )); 

    exit; 

这种作品,但不完全。

的响应应该是这样的:

{ 
    "username": "johndoe", 
    "items": [{ 
     "s": "1", 
     "f": "janedoe", 
     "m": "dqwdqwd" 
    }, { 
     "s": "1", 
     "f": "janedoe", 
     "m": "sdfwsdfgdfwfwe" 
    }, { 
     "s": "1", 
     "f": "janedoe", 
     "m": "werwefgwefwefwefweg" 
    }] 
} 
在我的情况

它看起来像:

{ 
    "username": "johndoe", 
    "items": "\t\t\t\t\t {\r\n\t\t\t\"s\": \"1\",\r\n\t\t\t\"f\": \"babydoe\",\r\n\t\t\t\"m\": \"test\"\r\n\t },\t\t\t\t\t {\r\n\t\t\t\"s\": \"1\",\r\n\t\t\t\"f\": \"\",\r\n\t\t\t\"m\": \"\"\r\n\t }" 
} 

什么想法?

感谢

编辑:

如果我转储$items我的是这样的:

{ 
    s: 1, 
    f: babydoe, 
    m: test 
}, { 
    s: 1, 
    f: babydoe, 
    m: test 
}, { 
    s:1, 
    f: babydoe, 
    m: test 
}, { 
    s: 1, 
    f: babydoe, 
    m: test 
} 
+2

看起来你几乎印刷'$ items'。如果你在调用'json_encode'之前弄乱了'$ items',那么什么都不能做 – Alexander

+0

你是用substr删除$ items的1个字符的原因是什么?如果我们可以跳过或调整那部分,我们可以返回一个数组,并且事情会正常工作。 – edwardmp

回答

1

试试这个:

echo json_encode(array(
     'username'=>$_SESSION['username'], 
     'items'=>array($items) 
    )); 

你需要一个多层次的阵列。

例如参见codepad

+0

nope。它看起来像'$ items'不是一个数组。看到我的帖子编辑请 – Patrioticcow

+0

它看起来像一个数组,所以我的代码应该工作。尝试在我的代码之前放置'$ items = array($ items);'。 – edwardmp

+0

是的。它似乎工作,但我仍然得到这些逃生:\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \:\“1 \”,\ r \ n \ t \ t \ t \“f \”:......“那里有任何想法? – Patrioticcow

1

你的$ items数组应该是这样的:

<?php 
$items = array(
    0 => array('s'=>1, 'f'=>'janedoe', 'm'=>'dqwdqwd'), 
    1 => array('s'=>1, 'f'=>'janedoe', 'm'=>'sdfwsdfgdfwfwe'), 
    2 => array('s'=>1, 'f'=>'janedoe', 'm'=>'werwefgwefwefwefweg') 
); 

echo json_encode(array(
     'username'=>$_SESSION['username'], 
     'items'=>$items 
    )); 
?> 

http://codepad.org/mZk4hsKq

+0

请看看我的编辑在哪里我倾倒'$ items' – Patrioticcow

+0

zend_debug :: dump() – Patrioticcow

+0

好的,所以$ items是一个json字符串。'json_encode'试图获取一个数组并从中创建一个json字符串 - 您需要首先解码'$ items'字符串。 – swatkins

0

变化

$items = substr($items, 0, -1); 

要:

foreach($items as $index => $d){ 
$items[$index] = substr($d, 0, -1); 
}