用json返回一个blob

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

这是我的杰森回应的一个例子。(图片和缩略图字段是blob)

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

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

 query($sql); $spots = array(); //array to parse jason from while($spot = $results->fetch_assoc()){ $spots[] = $spot; } echo json_encode($spots); ?> 

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

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

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

然后,您可以使用任何base 64解码器在Android应用程序中对此进行解码。 从API级别8开始,有一个内置的util类 。 否则,您可以使用大量外部库来定位Android 2.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); 

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