Возвращение блоб с JSON - PullRequest
11 голосов
/ 12 июня 2011

Я пытаюсь создать службу отдыха для моего приложения для Android, где внешняя база данных возвращает элементы, которые будут храниться в локальной базе данных приложений. У меня все работает, кроме того, что 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);
?>

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

Ответы [ 3 ]

25 голосов
/ 12 июня 2011

Кодируйте двоичные данные как base64 перед генерацией JSON.

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

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

5 голосов
/ 30 июля 2013

Вы должны сделать 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);
0 голосов
/ 12 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...