Javascript php动态生成json
我正在尝试将AngularJS与php后端结合起来。现在,我正试图用php生成一个json,将其返回到发送给angular的http请求中。到目前为止,我创建了这个phpJavascript php动态生成json,javascript,php,json,angularjs,Javascript,Php,Json,Angularjs,我正在尝试将AngularJS与php后端结合起来。现在,我正试图用php生成一个json,将其返回到发送给angular的http请求中。到目前为止,我创建了这个php $dbhost = "localhost"; $dbport = "5432"; $dbname = "fixevents"; $dbuser = "postgres"; $dbpass = "123"; $connect = pg_connect("host=" . $dbhost . " port=" . $dbport
$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和array的内容,但我不知道如何在列表中添加列表。我有一个列表,在每个列表项中我有另一个电子邮件列表,因为一个联系人可以有更多的电子邮件。
我现在生成的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"]}]
谢谢你,丹尼尔
编辑
这是无效的json(键必须使用双引号)。我的建议是:只需创建嵌套的PHP数组(和/或对象),然后一次性编码。这样还可以避免其他问题,比如在字符串中转义换行符
例如:
$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]}
这是无效的json(键必须使用双引号)。我的建议是:只需创建嵌套的PHP数组(和/或对象),然后一次性编码。这样还可以避免其他问题,比如在字符串中转义换行符
例如:
$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]}
只需创建一个本机PHP对象并使用: 因此,与此相反:
$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);
只需创建一个本机PHP对象并使用: 因此,与此相反:
$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);
使用数据构建一个数组,然后将数组传递到
json\u 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”,“颜色”:[“红色”,“蓝色”]}
编辑
更有效的方法(我认为,无论如何,数据更少…)
这里的区别在于,数组中的每个对象都有一个名称值对:
姓名:马特年龄:20岁姓名:杰森年龄:24岁
您将拥有一个名称数组
姓名:马特、杰森、埃里克年龄:20、24、26
使用数据构建一个数组,然后将数组传递到
json\u 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”,“颜色”:[“红色”,“蓝色”]}
编辑
更有效的方法(我认为,无论如何,数据更少…)
这里的区别在于,数组中的每个对象都有一个名称值对:
姓名:马特年龄:20岁姓名:杰森年龄:24岁
您将拥有一个名称数组
姓名:马特、杰森、埃里克年龄:20、24、26
但是如何在while循环while($row=pg_fetch_array($result))中应用$row['contact_firstname']呢?请参阅我的编辑。您可以在循环内部执行此操作,只需将变量添加到数组中,而不是静态文本。不断地添加到一个更大的数组中,然后在最后编码一次。注意这不是最有效的方法。有更好的方法吗?太好了!非常感谢您帮助我了解这个数组在没有静态文本的情况下是如何工作的。祝你有美好的一天!感谢大家在此主题上发表文章。但是我如何在while循环中应用$row['contact_firstname'],而($row=pg_fetch_array($result)),请参见我的编辑。您可以在循环内部执行此操作,只需将变量添加到数组中,而不是静态文本。不断地添加到一个更大的数组中,然后在最后编码一次。注意这不是最有效的方法。有更好的方法吗?太好了!非常感谢您帮助我了解这个数组在没有静态文本的情况下是如何工作的。祝你有美好的一天!谢谢大家在这个话题上发表文章。