首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超薄JSON输出

超薄JSON输出
EN

Stack Overflow用户
提问于 2011-07-24 22:30:58
回答 17查看 66.3K关注 0票数 31

我正在使用超薄框架和PHP为我的应用程序创建一个RESTful应用程序接口。但是,我假设框架应该有某种方法来创建更简单的JSON输出,而不仅仅是exit($jsonEncodedVariable);

我是不是在框架中遗漏了什么,或者我需要使用json_encode()... exit($json)...对于每种方法?

所有数据都从MySQL数据库中取出,然后根据调用的REST请求放入MySQL数组中。

例如,如果请求/api/posts/all,我将exit()一个包含所有帖子的JSON数组,每个帖子的值都是它自己的键"value" : key

我的问题是,有没有一种简单的方法,使用slim框架,让exit()'ing JSON代码不是以纯文本的形式退出?

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2011-07-24 22:46:27

代码语言:javascript
复制
header("Content-Type: application/json");
echo json_encode($result);
exit;

提示:Using The Slim PHP Framework for Developing REST APIs

票数 34
EN

Stack Overflow用户

发布于 2012-01-31 16:02:53

为什么不直接使用Slim的响应对象呢?(还有...为什么退出?)

代码语言:javascript
复制
$dataAry = // Some data array

$response = $app->response();
$response['Content-Type'] = 'application/json';
$response['X-Powered-By'] = 'Potato Energy';
$response->status(200);
// etc.

$response->body(json_encode($dataAry));
// Or echo json_encode($dataAry)

让我先说一句,我仍然认为自己是菜鸟,所以如果我犯了错误,请纠正我,这样我就可以学习了。但是,我正在玩一个类似的问题/问题,我想我可能会插话2美分,并在这个问题上进行更多的讨论。关于Slim on Stack的信息越多越好。

我基本上也在做同样的事情,我注意到您使用的是 exit ;起初,我使用exit也是因为echo包含了一堆HTML,弄乱了返回给我的AJAX调用的内容。当我使用exit时,它干净利落地切断了HTML,但是Slim响应对象并没有像我定义的那样改变响应头(参见上面的代码)。

我意识到这不是Slim设计的工作方式。使用echo,而不是exit。注意-超薄文档:

每当您从路由回调中回显()内容时,echo()的内容在输出缓冲区中被捕获>,并且稍后在HTTP响应被>返回给客户端之前被附加到响应主体。

这很方便,但我无法回显。我搞砸的是一个更大的问题。内容与行为的分离。如果您和我一样,您正在设置一个单页面应用程序,其中的代码基本上位于index.php上。有一个初始的html,我需要加载,所以我把它包含在页面上。我需要做的是创建一个更干净的分离。我的路由设置得很好,所以当人们得到'/‘这个Slim_Views时(参见开发版本)。为我返回html和js的呈现模板。非常出色!

现在,我拥有了Slim的所有工具,并且我的代码更加干净、独立、易于管理,并且更符合http协议。我想这就是框架的作用。:-)

注意:我并不是说所有这些都是你的问题,但我认为这个问题和你的设置非常相似。这可能会帮助另一个在这条道路上徘徊的新人。

更新: @alttag提到,这个答案已经过时了(Slim 2)

对于Slim3,请参阅下面的答案或see this page in the documentation

票数 62
EN

Stack Overflow用户

发布于 2016-02-29 02:51:04

在使用Slim 3时,我使用的是以下格式:

代码语言:javascript
复制
<?php

$app = new \Slim\App();

$app->get('/{id}', function ($request, $response, $args) {
    $id = $request->getAttribute('id');

    return $response->withJSON(
        ['id' => $id],
        200,
        JSON_UNESCAPED_UNICODE
    );
});

在请求"/123“时,结果JSON为:

代码语言:javascript
复制
{
  id: "123"
}

更多信息read here

更新向withJSON添加了第二个和第三个参数。第二个是HTTP状态码,第三个是Json编码选项(最适合特殊字符和其他字符,例如:正确打印"ã“)

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6807404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档