将 JSON 从 PHP 返回到 JavaScript?

IT技术 php javascript json
2021-02-10 20:08:56

我有一个通过 jQuery AJAX 调用的 PHP 脚本。我希望 PHP 脚本将 JSON 格式的数据返回给 javascript。这是 PHP 脚本中的伪代码:

$json = "{";
foreach($result as $addr)
{
    foreach($addr as $line)
    {
        $json .= $line . "\n";
    }
    $json .= "\n\n";
}
$json .= "}";

基本上,我需要将两个 for 循环的结果插入到 $json 中。

6个回答

Php 有一个内置的 JSON 序列化功能。

json_encode

json_encode

如果您可以并且不要遭受“非发明在这里”综合症,使用它。

(此外,对于 AJAX 来说,设置标题并不是绝对必要的。如果我看起来很突然,请道歉,但是引号中的“'答案'”这个词给出的阴影确实让我感到震惊,那是 10 年前,让它已经死了。很久以前,我已经从 PHP 转移到我转移到的语言,我现在也在转移。)
2021-03-21 20:08:56
@FunkDoc 有问题的 OP 正在手动将 JSON 串在一起,假设这是他们唯一的选择。知道这不是他们唯一的选择是一个合适的解决方案。没有义务在于该JSON的最终结果将被发射为HTTP响应。“添加标题”信息虽然对一种情况很有用,但如果您使用该 JSON 所做的不是简单地“将其逐字返回到网页”,则不会对您有所帮助。该问题没有对用例进行澄清。
2021-03-27 20:08:56
这个“答案”并不完整,而且毫无用处。有关更完整的信息,请参阅 aesede 的答案。
2021-04-07 20:08:56
非常好,谢谢。在发布到 SO 之前,我实际上已经查看过这个,但我认为它不会在我的主机上可用。
2021-04-09 20:08:56

以下是之前的答案中缺少的一些内容:

  1. 在 PHP 中设置标题:

    header('Content-type: application/json');
    echo json_encode($array);
    
  2. json_encode()可以返回 JavaScript数组而不是 JavaScript对象,请参阅:
    从 PHP 脚本返回 JSON
    在某些情况下,了解这一点可能很重要,因为数组和对象不同。

需要注意的是,数据是echo ed 而不是return ed!在第一次学习这个概念时,这让我很受打击。因为在一般的编程中,几乎所有的东西通常都是返回而不是“打印”的。
2021-03-25 20:08:56
嘿@Juha,请记住json_encode()(像所有函数一样)总是会返回一些东西(包括NULL);你可以打印数据,处理它然后打印它,将它分配给一个变量供以后使用,将它保存到一个文件等......你可以returnPHP 中阅读更多:返回值此外,您可以(并且应该!)检查您不知道的每个函数返回的内容,请参阅我们的示例json_encode()它指出成功时返回 JSON 编码的字符串或失败时返回 FALSE。
2021-04-04 20:08:56
那时,我想知道为什么return json_encode($jsonArray);不起作用(AngularJS http.get 没有得到任何东西),直到我后来注意到它:)
2021-04-10 20:08:56

PHP 的文档中有一个JSON 部分不过你需要 PHP 5.2.0。

从 PHP 5.2.0 开始,JSON 扩展默认捆绑并编译到 PHP 中。

如果没有,这里是您可以安装PECL 库

<?php
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

    echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
?>

通常你会对接收端的数据也有一些结构感兴趣:

json_encode($result)

这也将保留数组键。

请记住 json_encode 仅适用于 utf8 编码的数据。

您可以使用Simple JSON for PHP它发送标头帮助您伪造 JSON。

看起来像 :

<?php
// Include the json class
include('includes/json.php');

// Then create the PHP-Json Object to suits your needs

// Set a variable ; var name = {}
$Json = new json('var', 'name'); 
// Fire a callback ; callback({});
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {}
$Json = new json();

// Build data
$object = new stdClass();
$object->test = 'OK';
$arraytest = array('1','2','3');
$jsonOnly = '{"Hello" : "darling"}';

// Add some content
$Json->add('width', '565px');
$Json->add('You are logged IN');
$Json->add('An_Object', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);

// Finally, send the JSON.

$Json->send();
?>
@JamieBirch 实际上,我认为您误解了 GPL 的工作原理。如果您在谈论 AGPL,那么您会有所了解。但是互联网上的大量熨平板是建立在 GPL 软件上的,并且没有义务开源他们的代码,因为他们没有给用户任何在他们控制下的可执行文件,只提供一个接口。他们唯一的义务是,他们向任何人提供项目的数字副本也必须提供来源。
2021-03-16 20:08:56
警告:用于 PHP 的简单 JSON 已获得 GPLv2 许可,因此您自己的代码必须是开源的才能使用它。
2021-03-29 20:08:56
现在麻省理工学院许可证:)
2021-04-02 20:08:56