json_decode返回空白

时间:2013-08-28 12:45:22

标签: php json

我正在研究facebook app。我已经以json格式在数据库中存储了一些值。

当我在目标页面上获取值并尝试显示如下值时:

$sql = mysql_query("select * from `beforepublish` where `tabid` = '$page_id'") or die(mysql_error());
$sql = mysql_fetch_assoc($sql);

$contest_id = $sql['contestid'];
$temp_id = $sql["tempid"];
$value = $sql["values"];
$returnValue = json_decode($value);
echo "<pre>";
print_r($returnValue);
echo "</pre>";

这里是

的值

$value = {"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab "}

我将$returnValue视为空白。

但是当我尝试时:

$returnValue = json_decode('{"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab "}');
echo "<pre>";
print_r($returnValue);
echo "</pre>";

然后$ returnValue返回:

stdClass Object
(
    [image] => upload_1182341221.jpg
    [conttxt] => Get a chance to win Samsung Galaxy Tab 
)

所以伙计们,请帮助我,为什么我在前一个案例中得到一个空白值?

修改

vardump($ value)正在返回:

string '{"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab
    "}' (length=86)

3 个答案:

答案 0 :(得分:1)

有点奇怪,但它可能与数据库没有给你UTF8字符串(json_decode需要)。

尝试

mysql_query("SET NAMES 'utf8';");
在实际查询之前

//编辑: 换行实际上是导致问题的原因。尝试使用json验证器:http://jsonlint.com/

答案 1 :(得分:1)

尝试在utf8中获取它。

来自json_decode doc(此函数仅适用于UTF-8编码数据。)

答案 2 :(得分:0)

string '{"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab
    "}' (length=86)

有你的问题。那个换行符和标签。它应该看起来像:

string '{"image":"upload_1182341221.jpg","conttxt":"Get a chance to win Samsung Galaxy Tab"}' (length=84)

这就是var_dump()输出长度的原因,因此您可以针对任何不需要/不可见的字符进行验证。


您可以将javascript字符串中的换行符存储为\n json_encode()会自动执行此操作。

这适用于所有转义序列(常用转义序列为\n\r\t\b)。