Я видел несколько ответов, которые предоставляют обходные пути или альтернативы, но я надеюсь, что что-то действительно гладкое и непрямое или подходящие функции для перехода от объекта / массива JSON к стандартной строке запроса в стиле multipart / form-data, наиболее идеальный соответствие какой функции PHP http_build_query
вернется для объекта JSON, который был закодирован в локальный массив / объект.
Основная предпосылка:
При отправке вызовов API через POST / PUT тело сообщения обычно кодируется в формате JSON, например:
{
"filter": [
{
"field_x": {
"$gte": "9"}
},
{
"assigned_user_link.user_name": "user7"},
{
"date_entered": {
"$gte": "2014-08-01"}
}
]
}
И это совершенно потрясающе и работает. Отправка этих же параметров в запросе GET должна выглядеть следующим образом:
?filter[0][field_x][$gte]=9&filter[1][assigned_user_link.user_name]=user7&filter[2][date_entered][$gte]=2014-08-01
И то, и другое точно соответствует их контексту, вместо того, чтобы передавать версию JSON в кодировке URL, использованную ранее.
В PHP я могу сделать несколько шагов, чтобы поменять местами:
parse_str($_SERVER['QUERY_STRING'],$filter_array);
$filter_json = json_encode($filter_array); // Now I've got the JSON
$filter_phobj = json_decode($filter_json); // Now I've got the native Object/Array
$filter_query = rawurldecode(http_build_query($filter_phobj)); // And full circle
То, что я ищу, — это элегантный или простой или уже существующий стандартный подход в API Javascript / DOM, который примет JSON выше и вернет строку запроса.
Наиболее важным является обработка объектов со свойством как массив, который будет обрабатываться в строке запроса как:
key[0][subkey1][subval1]&key[1][subkey2][subval2]
Я уверен, что это тривиальная задача, но все результаты поиска склоняются к неэлегентному циклу (который можно заменить на лучший цикл, а не к циклу голосования) или обходят стороной проблему и настаивают на том, что «отправка в формате json с кодировкой URL лучше» в любом случае. вот как ты это делаешь «. URL-кодированный-json — это другой способ, и если обе стороны запроса / ответа соответствуют ему, это работает. Но целью здесь является функция / библиотека JS, которая может отправлять вызовы API, используя тот же объект JSON, но соответствующим образом переработанный для контекста.
Задача ещё не решена.
Других решений пока нет …