Перейти к содержанию
  • Регистрация
  • 0
Dmitry Stolyarov

Разбор JSON с мультизапросом

Вопрос

Подскажите, пжл, ка разобрать такой JSON: 

[
    {
        "cities_id": "1",
        "cities_idpartner": "2",
        "cities_name": "москва"
    },
    {
        "cities_id": "2",
        "cities_idpartner": "2",
        "cities_name": "москва2"
    }
][
    {
        "prices_id": "1",
        "prices_name": "полный прайс",
        "prices_idpartner": "2",
        "prices_rub": "1000.00"
    },
    {
        "prices_id": "2",
        "prices_name": "многодетные",
        "prices_idpartner": "2",
        "prices_rub": "750.00"
    }
][ 

... несколько подобных запрос с разных таблиц в одном JSON

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0
2 минуты назад, krapotkin сказал:

предположу что ][ - это точно не JSON

не исключаю ошибки в формировании JSON.. (опыта нет)

сам php:


if ($DBResult = mysqli_query($DBLink, $query2)) {
  $ResultArray = array();	
  $Index = 0;
    while ($row = mysqli_fetch_array($DBResult, MYSQLI_ASSOC)){
	 $ResultArray[$Index] = $row;
	 $Index++;	
	}
  $ResultJSON = json_encode($ResultArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
	echo $ResultJSON;
	mysqli_free_result($DBResult);
}

if ($DBResult = mysqli_query($DBLink, $query3)) {
  $ResultArray = array();	
  $Index = 0;
    while ($row = mysqli_fetch_array($DBResult, MYSQLI_ASSOC)){
	 $ResultArray[$Index] = $row;
	 $Index++;	
	}
  $ResultJSON = json_encode($ResultArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
	echo $ResultJSON;
	mysqli_free_result($DBResult);
}

if ($DBResult = mysqli_query($DBLink, $query4)) {
  $ResultArray = array();	
  $Index = 0;
    while ($row = mysqli_fetch_array($DBResult, MYSQLI_ASSOC)){
	 $ResultArray[$Index] = $row;
	 $Index++;	
	}
  $ResultJSON = json_encode($ResultArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
	echo $ResultJSON;
	mysqli_free_result($DBResult);
}

на выходе дает указанный выше формат 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

вы просто без разделителей склеиваете три разных JSON-массива

вам бы каждый из них описать отдельно. да и вообще принято логически законченные участки кода выделять в отдельные функции

function GetValuesAsJson($query) {
  .....
}

тогда будет например

'{"Arr1":'. GetValuesAsJson($query1). ',  "Arr2":'.GetValuesAsJson($query2).', "Arr3":'.GetValuesAsJson($query3).'}'

ну и разбор полученного объекта например с помощью XSuperObject. Примеры есть на офсайте https://github.com/onryldz/x-superobject

Изменено пользователем krapotkin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, krapotkin сказал:

вы просто без разделителей склеиваете три разных JSON-массива

вам бы каждый из них описать отдельно. да и вообще принято логически законченные участки кода выделять в отдельные функции


function GetValuesAsJson($query) {
  .....
}

тогда будет например


'{"Arr1":'. GetValuesAsJson($query1). ',  "Arr2":'.GetValuesAsJson($query2).', "Arr3":'.GetValuesAsJson($query3).'}'

ну и разбор полученного объекта например с помощью XSuperObject. Примеры есть на офсайте https://github.com/onryldz/x-superobject

krapotkin, спасибо!

Публикую, может кому-то пригодится..

на стороне PHP:

 $query1 = "SELECT ... FROM `...`;";
 $query2 = "SELECT ... FROM `...`;";
 $query3 = "SELECT ... FROM `...`;";
 $query4 = "SELECT ... FROM `...`;";

function GetValuesAsJson($query, $Link) 
{
 if ($DBResult = mysqli_query($Link, $query)) {
  $ResultArray = array();	
  $Index = 0;
    while ($row = mysqli_fetch_array($DBResult, MYSQLI_ASSOC))
    {
	 $ResultArray[$Index] = $row;
	 $Index++;	
	  }
  $ResultJSON = json_encode($ResultArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
	return $ResultJSON;
	mysqli_free_result($DBResult);
    }
};

echo '{"Arr1":'. GetValuesAsJson($query1, $DBLink).',  "Arr2":'.GetValuesAsJson($query2, $DBLink).',  "Arr3":'.GetValuesAsJson($query3, $DBLink).',  "Arr4":'.GetValuesAsJson($query4, $DBLink).'}';

mysqli_close($DBLink);

на стороне delphi:

xJS := SO(aJSON); 
  with xJS.A['Arr1'] do // имя массива
  begin
    for j := 0 to length - 1 do
    begin
      xObj := O[j];
      Memo1.Lines.Add(xObj.S['cities_name']); // собираем нужные данные
...
   end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Мимо проходил. Вот вам код на php (собираем все данные в один массив и энкодим в json)

$QueryArray = array(
	"SELECT ... FROM `...`;",
	"SELECT ... FROM `...`;",
	"SELECT ... FROM `...`;",
	"SELECT ... FROM `...`;",
);

$Index = 0;
$ResultArray = array();
foreach ($QueryArray as $query) {
	if ($mysqli_result = mysqli_query($DBLink, $query)) 	
 		while ($row = mysqli_fetch_array($mysqli_result, MYSQLI_ASSOC)) 	
			$ResultArray[$Index][] = $row;
	$Index++;
}
$ResultJSON = json_encode($ResultArray, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $ResultJSON;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...