返回只有一个JSON对象而不是多个对象PHP?

9 浏览
0 Comments

返回只有一个JSON对象而不是多个对象PHP?

请先查看这个JSON:http://ws.luyencong.net/data/search/query.php?do=json

以下是它的代码:

/* --- 执行查询并获取数据。--- */
$query = $db->query("SELECT t.* FROM ".TABLE_PREFIX."threads t");
while($data = $db->fetch_array($query))
{
    $results[] = array($data['subject'] => $data['subject']);
    $json = json_encode($results, JSON_FORCE_OBJECT);
}
/* --- 将结果打印到屏幕上,以备将来使用。--- */
echo $json;

但我希望输出的JSON格式看起来像这样:http://ws.luyencong.net/data/search/json.txt

将不胜感激您的帮助。感谢您的一切。

祝您拥有愉快的一天!

0
0 Comments

问题:返回的只是一个JSON对象而不是多个对象的原因是什么?有什么解决方法?

问题的原因是代码中嵌套了数组。看起来你只想要一个单独的JSON对象,而不是一个对象数组。所以,将$result的设置更改为:

$results[$data['subject']] = $data['subject'];

然后按照建议,将json_encode移到循环之外,直到数组被填充之后再进行编码。你只是一次又一次地无故覆盖变量。

以下是一种可能的解决方法:

$results = array();
while ($row = mysqli_fetch_array($result)) {
    $data = array(
        'subject' => $row['subject'],
        'author' => $row['author'],
        'date' => $row['date']
    );
    $results[] = $data;
}
echo json_encode($results);

这样做将返回一个包含多个对象的JSON数组。如果你只想返回一个JSON对象,而不是数组,可以像下面这样修改代码:

$result = array();
while ($row = mysqli_fetch_array($result)) {
    $data = array(
        'subject' => $row['subject'],
        'author' => $row['author'],
        'date' => $row['date']
    );
    $result = $data;
}
echo json_encode($result);

这样修改后,$result将只包含一个对象,而不是一个对象数组。

0
0 Comments

问题的原因是在循环中,每次都将数据存储到一个数组中,然后使用json_encode函数将整个数组转换为JSON格式。这导致返回的JSON字符串中包含了多个对象。

解决方法是在循环中直接将数据存储到一个关联数组中,其中键是数据的一个属性,值是该属性的值。然后在循环结束后,使用json_encode函数将关联数组转换为JSON格式。

以下是修改后的代码:

/* --- 执行查询并获取数据。--- */
$query = $db->query("SELECT t.* FROM ".TABLE_PREFIX."threads t");
$results = array();
while($data = $db->fetch_array($query))
{
    $results[$data['subject']] = $data['subject'];
}
/* --- 将结果输出到屏幕上,以备将来使用。--- */
echo json_encode($results, JSON_FORCE_OBJECT);

在修改后的代码中,我们将$results数组变为一个关联数组,并使用$data['subject']作为键和值。然后在循环结束后,我们使用json_encode函数将$results数组转换为JSON格式,并使用JSON_FORCE_OBJECT选项确保返回的是一个对象,而不是一个数组。这样,我们就可以得到只包含一个对象的JSON字符串。

0
0 Comments

问题的原因是在循环内部调用了json_encode函数,导致每次循环都会生成一个新的JSON对象,最终只返回了最后一个对象。解决方法是将json_encode函数移动到循环外部,在循环结束后统一调用。

下面是修改后的代码:

/* --- 执行查询并获取数据 --- */
$query = $db->query("SELECT t.* FROM ".TABLE_PREFIX."threads t");
while($data = $db->fetch_array($query))
{
    $results[$data['subject']] = $data['subject'];
}
$json = json_encode($results, JSON_FORCE_OBJECT);
/* --- 将结果输出到屏幕,以备将来使用 --- */
echo $json;

原帖中的代码中,每次循环都会生成一个新的JSON对象,因此最终只返回了最后一个对象。将json_encode函数移动到循环外部后,只在循环结束后调用一次json_encode函数,将所有结果转化为一个JSON对象并返回。

这样修改后的代码不仅效率更高,而且将返回一个包含所有结果的JSON对象,满足了原帖中的要求。

0