我正在尝试将AngularJS与php后端结合使用。现在我正在尝试用php生成一个json,将它返回到一个http请求到angular。到目前为止,我创建了这个PHP。
$dbhost = "localhost";
$dbport = "5432";
$dbname = "fixevents";
$dbuser = "postgres";
$dbpass = "123";
$connect = pg_connect("host=" . $dbhost . " port=" . $dbport . " dbname=" . $dbname . " user=" . $dbuser . " password=" . $dbpass);
$query = "SELECT contact_firstname, contact_lastname, contact_id, contact_email FROM contact WHERE user_id = 1";
$result = pg_query($connect, $query);
$comma = '';
$json = '[';
while ($row = pg_fetch_array($result)) {
$json .= $comma . '{';
$json .= 'contact_firstname:"' . addslashes($row['contact_firstname']) . '",';
$json .= 'contact_lastname:"' . addslashes($row['contact_lastname']) . '",';
$json .= 'contact_id:' . addslashes($row['contact_id']) . ',';
$json .= 'contact_email:[';
$contact_email = explode(',,,', addslashes($row['contact_email']));
$comma_email = '';
foreach($contact_email as $email) {
$json .= $comma_email . '"' . $email . '"';
$comma_email = ',';
}
$json .= ']';
$json .= '}';
$comma = ',';
}
$json .= ']';
echo $json;
但我读的一些评论比我的更多的思想:)他们说,手动创建json并不是最好的主意。任何人都可以告诉我如何生成这个json是一种更时尚的方式?我看到了一些关于json_endode和数组但我不知道如何在列表中添加列表。我有一个列表,在每个列表项目中我有另一个列表与电子邮件,因为1个联系人可以有更多的电子邮件。 我现在生成的JSON看起来像这样
[{contact_firstname:"Daniel",contact_lastname:"Pacuraru",contact_id:1,contact_email:["pacurarudaniel@gmail.com","hello@pacurarudaniel.com"]},{contact_firstname:"Someone",contact_lastname:"Else",contact_id:2,contact_email:["someone.else@gmail.com"]}]
谢谢你,丹尼尔!
修改
$myjson = array();
while($row = pg_fetch_array($result)) {
$json = array(
'contact_firstname' => addslashes($row['contact_firstname']),
'contact_lastname' => addslashes($row['contact_lastname']),
'contact_id' => addslashes($row['contact_id']),
'contact_email' => explode(',,,', addslashes($row['contact_email']))
);
array_push($myjson, $json);
}
echo json_encode($myjson);
答案 0 :(得分:4)
这是无效的json(键必须使用双引号)。我的建议:只需创建嵌套的PHP数组(和/或对象),然后用json_encode
一次编码。这样你就可以避免其他问题,比如在字符串中转换换行符。
例如:
$some_data = array(
'something' => 10,
'something_else' => "foo",
'some_array' => array(1,2,3,4)
);
echo json_encode($some_data);
输出:
{"something":10,"something_else":"foo","some_array":[1,2,3,4]}
答案 1 :(得分:2)
使用您的数据构建数组,然后将arry传递给json_encode
,您将获得格式良好的字符串。
$BigArray = array();
$Index = 0;
while($row = getSomeData()){
$BigArray[$Index] = array(
'Name' => $row['name'],
'Age' => $row['age'],
'Colors' => array(
'0' => 'Red',
'1' => 'Blue'
)
);
$Index++;
}
echo json_encode($array);
{ “名称”: “马特”, “年龄”: “20”, “色彩”:[ “红”, “蓝”]}
修改强>
更有效的方式(我认为,无论如何都要减少数据......)
$Names = array();
$Ages = array();
$Colors = array();
$Index = 0;
while($row = getSomeData()){
$Names[$Index] = $row['name'];
$Ages[$Index] = $row['age'];
$Colors[$Index] = array(
'0', => 'Red',
'1', => 'Blue'
};
$Index++;
}
$JSonArray = array(
'Names' => $Names,
'Age' => $Ages,
'Color' => $Colors
);
json_encode($JSonArray);
这里的区别在于您将为数组中的每个对象命名一个名称值对:
姓名:Matt年龄:20岁,姓名:Jason,年龄:24岁
您将拥有一系列名称。
姓名:马特,杰森,埃里克 年龄:20岁,24岁,26岁
答案 2 :(得分:0)
只需创建一个本机PHP对象并使用json_encode
:
json_encode($obj);
所以不要这样:
$comma = '';
$json = '[';
while ($row = pg_fetch_array($result)) {
$json .= $comma . '{';
$json .= 'contact_firstname:"' . addslashes($row['contact_firstname']) . '",';
$json .= 'contact_lastname:"' . addslashes($row['contact_lastname']) . '",';
$json .= 'contact_id:' . addslashes($row['contact_id']) . ',';
$json .= 'contact_email:[';
$contact_email = explode(',,,', addslashes($row['contact_email']));
$comma_email = '';
foreach($contact_email as $email) {
$json .= $comma_email . '"' . $email . '"';
$comma_email = ',';
}
$json .= ']';
$json .= '}';
$comma = ',';
}
$json .= ']';
echo $json;
你只需要这个:
echo json_encode($result);