【问题标题】:Returning a blob with json用 json 返回一个 blob
【发布时间】:2011-09-13 11:17:31
【问题描述】:

我正在尝试为我的 android 应用程序创建一个休息服务,其中外部数据库返回要存储在应用程序本地数据库中的项目。除了blob被返回为null之外,我已经完成了所有工作。

这是我的 jason 响应示例。(图片和缩略图字段是 blob)

{"id":"2","user_id":"1","name":"testing","type":"bouldering","picture":null,"lat":"36","long":"81","alt":"41932","accuracy":"53","thumbnail":null}

这是我返回数据的 php 脚本。

<?php
require_once('config.php');

$mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
$sql = 'select * from spot_main';
$results =$mysqli->query($sql);

$spots = array();  //array to parse jason from

while($spot = $results->fetch_assoc()){
    $spots[] = $spot;                                                           
}

echo json_encode($spots);
?>

有人知道这个问题的解决方案吗?我知道我这样做不是最有效的方式(最好将图像存储在文件系统中),但我需要这样做。

【问题讨论】:

标签: php android mysql json blob


【解决方案1】:

你必须将 BLOB 制作成 base64_encode

 while($spot = $results->fetch_assoc()){
     $spots[] = $spot;                                                           
    }

然后像这样准备一个foreach循环

foreach($spots as $key=>$value){
    $newArrData[$key] =  $spots[$key];
    $newArrData[$key]['picture'] = base64_encode($spots[$key]['picture']);
    $newArrData[$key]['thumbnail'] = base64_encode($spots[$key]['thumbnail']);
}
header('Content-type: application/json');
echo json_encode($newArrData);

【讨论】:

    【解决方案2】:

    在生成 JSON 之前将二进制数据编码为 base64。

    $obj->picture = base64_encode($binaryData);
    

    然后您可以在您的 Android 应用程序中使用任何 base 64 解码器对其进行解码。由于 API 级别 8,有一个内置的 util class。否则,您可以使用大量外部库来针对 Android 2.1 或更早版本。

    【讨论】:

      【解决方案3】:

      json_encode 似乎只适用于 UTF-8 编码的数据。您可以使用json_last_error() 来检测json_encode 错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-07
        • 2023-03-09
        • 2012-02-28
        • 1970-01-01
        • 2016-04-25
        • 1970-01-01
        • 2015-08-13
        相关资源
        最近更新 更多