我正在尝试理解JSON响应是字符串的错误。
不起作用:
render json: "downgrade"
错误:
SyntaxError:位于0的JSON中的意外标记d
这有效:
render json: {recommendation: "downgrade"}
这有效:
render json: ["downgrade"]
即便如此:
render json: 17
为什么整数本身可以工作但字符串不会?或者render json: "downgrade"
需要以不同的方式书写。
[注意:这是从Rails后端发送的]
答案 0 :(得分:1)
downgrade
输出"downgrade"
。正如您所看到的,字符串周围没有引号,因此它不是有效的JSON字符串。它必须是.to_json
。
当你打印一个整数时,它输出一个整数,没有引号,没有额外的符号,这是一个有效的JSON。
要使其正常工作,您需要强制它打印这些引号。您可以在最后添加render json: "downgrade".to_json # => "\"test\""
来完成此操作。
render :json
这将呈现有效的JSON数据。
但请注意,<?php
require_once('facebook-php-sdk-3.2.3/src/facebook.php');
const TITLE = 'My amazing app';
const REDIRECT = 'https://example.com/myapp/';
$client = new Facebook(array(
'appId' => REPLACE_ME,
'secret' => REPLACE_ME,
));
if (isset($_REQUEST['logout'])) {
$client->destroySession();
header('Location: ' . REDIRECT);
exit(0);
}
if ($client->getUser()) {
try {
$me = $client->api('/me?fields=id,first_name,gender');
$body = '<PRE>' . print_r($me, TRUE) . '</PRE>';
} catch (FacebookApiException $ex) {
error_log($ex);
$body = '<PRE>' . htmlspecialchars($e->getMessage()) . '</PRE>';
}
} else {
$body = sprintf('<P><A HREF="%s">Login</A></P>', $client->getLoginUrl());
}
?>
<!DOCTYPE HTML>
<HTML>
<HEAD>
<TITLE><?= TITLE ?></TITLE>
</HEAD>
<BODY>
<?= $body ?>
<P><A HREF="<?= REDIRECT ?>?logout">Logout</A></P>
</BODY>
</HTML>
自动为supposed to call .to_json
对象。但是,正如你所看到的那样。在这种情况下。