Работа с JSON

1. Don (25.11.2014 / 09:44)
Идея такова, данные полученные с БД преобразовать в JSON формат, условие такое что не все поля нужны, допустим 12345 нам нужны выборочно 235. И весь полученный результат сохранить в .txt (в преобразованном виде JSON)
---
Есть неплохой css framework таблица данных, работает по JSON, хочу прикрутить это дело)
помогите реализовать концепцию... с JSON не приходилось работать..

2. Антон (25.11.2014 / 11:24)
1. БИТ, по твоему описанию на ум приходят функции unlink, foreach(?), json_encode. Больше ничего не могу сказать.

3. Александр (25.11.2014 / 16:37)
"Есть неплохой css framework таблица данных, работает по JSON" css framework не может сам работать с json, непонятный вопрос.

4. iNeeXT (25.11.2014 / 17:02)
Можно не сохранять данные в файл, а отдавать их через php-файл.

<?php

// подключение к базе данных

// предположим, что в переменную $data ты выбрал из базы данных необходимые данные

$response = array();
foreach ($data as $item)
    $response[] = array('name' => $item['name'], ...);


echo json_encode($response);

Вот так преобразуешь данные в JSON-формат.

Муз-ТВ, скорее всего там JS-скрипт их подставляет в таблицу.

5. Дмитрий (25.11.2014 / 20:09)
Все просто. Чтобы преобразовать массив в JSON, на стороне сервера используй ф-ю json_encode(). А на стороне клиента преобразуй его в объект и работай как с объектом JavaScript.

Например, ты отправляешь Ajax запрос на сервер, а там выполняется примерно вот такой код:
<?php
$array = array(
	array(
		'title' => 'Заголовок 1',
		'desc' => 'Описание 1'
	),
	array(
		'title' => 'Заголовок 2',
		'desc' => 'Описание 2'
	),
	array(
		'title' => 'Заголовок 3',
		'desc' => 'Описание 3'
	)
);
exit(json_encode($array));

При этом сервер тебе вернет вот это:
[{"title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1","desc":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 1"},{"title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2","desc":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 2"},{"title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3","desc":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 3"}]

Затем в клиенте обрабатываешь пришедшие данные вот такой конструкцией:
var parseJSON = (window.JSON && JSON.parse) ? function (obj) {
    try { return JSON.parse(obj); } catch (e) {
      return eval('('+obj+')');
    }
  } : function(obj) {
  return eval('('+obj+')');
};

Здесь проверяется, поддерживает ли браузер метод JSON.parse. Если да - данные обрабатываются им. Если нет - то eval().

Например покажу на примере работы моего самописного аякс-объекта:
Ajax.get('/server.php', function(http_request){
  // распарсили полученные данные
  var data = parseJSON(http_request.responseText);
  
  // посчитали размер объекта
  var count = data.count;
  
  // перебрали объект
  for(var i=0; i<count; i++) {
    
    // алерт отдаст "Заголовок1 Описание1"
    alert(data[i]['title']+'\n'+data[i]['desc']);
  }
});

Либо так:
// отправили запрос
Ajax.get('/server.php', function(http_request){
  
  // распарсили полученные данные
  var data = parseJSON(http_request.responseText);
  
  // напрямую обратились к массиву
  // алерт отдаст "Заголовок2 Описание2"
  alert(data[1]['title']+'\n'+data[1]['desc']);
});


6. Александр (25.11.2014 / 20:23)
Вот не лень же было так расписать.

7. Антон (25.11.2014 / 23:24)
6. Муз-ТВ, раз в две недели можно))
Хороший ответ Дмитрий, все как надо расписал.

URL: https://visavi.net/topics/41622