Возвращение blob с json

Я пытаюсь создать службу отдыха для своего приложения для Android, где внешняя база данных возвращает элементы, которые будут храниться в локальной базе данных приложений. У меня есть все, кроме blobs, которые возвращаются как null.

это пример моего ответа на jason. (изображения и миниатюры - это капли)

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

Вот мой php script, чтобы вернуть данные.

<?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);
?>

Кто-нибудь знает о решении этой проблемы? Я знаю, что я не делаю этого наиболее эффективным способом (лучше хранить изображения в файловой системе), но мне нужно, чтобы это работало.

Ответ 1

Кодировать двоичные данные как base64 перед созданием JSON.

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

Затем вы можете декодировать это в своем приложении Android с любым базовым 64-декодером. Начиная с уровня API 8, существует встроенный класс использования. В противном случае существует множество внешних библиотек, которые вы можете использовать для Android 2.1 или более ранних версий.

Ответ 2

вам нужно сделать 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);

Ответ 3

Кажется, что json_encode работает только с кодированными данными UTF-8. Вы можете использовать json_last_error() для обнаружения ошибки json_encode.