Как правильно работать с json?

Добрый день, что то не могу понять как правильно работать с json+mysql+php
Делаю тест, в базе храню ответы и вопросы в одном поле в формате json
{
      'id': 0,
      'text': 'Сколько ног у лошади?',
      'correct': 3,
      'answers': [
        {'id': 0, text: '1'},
        {'id': 1, text: '2'},
        {'id': 2, text: '3'},
        {'id': 3, text: '4'}
      ]
    },

все норм во фронтенде получается, там ангуляр работает
$scope.questions = [{{ $subject_test['question1'] }}];

но мне надо вырезать при отдаче на клиента ответ 'correct': 3,
может как то лучше можно реализовать или подскажите как мне справиться с ситуацией
  • Вопрос задан
  • 3107 просмотров
Решения вопроса 1
@hedint
Web разработчик
А что мешает распарсить json на сервере (json_decode php) в массив после извлечения из базы, удалить элемент массива correct, запаковать json(json_encode) и отдать на клиент?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AmdY
@AmdY
PHP и прочие вебштучки
Если я правильно понял из тегов, данные вы выгребаете из базы данных с помощью laravel. Что-то вроде Questions::all();
Полученная модель поддерживает интерфейс JsonableInterface, чтобы запретить поле для модели нужно прописать protected $hidden = ['correct'];
laravel.com/docs/4.2/eloquent#converting-to-arrays...
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега MySQL
Вообще хранить json в БД не лучшая идея, а json с одинарными кавычками невалидный.
Но, если уж надо, то распарсить его можно примерно так:

SELECT 
	@correct_answer_position := LOCATE("'correct'", `text`),
	@comma_position := LOCATE(",", `text`, @correct_answer_position),
	@length := @comma_position - @correct_answer_position,
	SUBSTRING(`text`,  @correct_answer_position, @length) AS 'correct_answer'
FROM `test`.`test`


... или в одну строку:
SELECT 
    SUBSTRING(`text`,  LOCATE("'correct'", `text`), LOCATE(",", `text`, LOCATE("'correct'", `text`)) - LOCATE("'correct'", `text`)) 
    AS 'correct_answer' 
FROM `test`.`test`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы