Возвращение 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.