URL кодирует вложенные объекты JSON, которые содержат сам URL - PullRequest
0 голосов
/ 01 ноября 2019

Итак, у меня есть этот основной URL

myapp://page/open-slideup-menu?params=${encodeURIComponent(JSON.stringify(this._getDeeplinkParams()))}

Функция _getDeeplinkParams возвращает и вложенный объект JSON, например

{
      header_text: 'Post Options',
      cancel_text: 'Cancel',
      options: optionsArray
}

optionsArray имеет видмассив, который имеет вложенный JSON, который может содержать в себе URL-адрес ..

    const deletePostAction =  {
      url: `https://api.com/posts/XXX`,
      method: 'DELETE'
    };

    const deletePostOption = {
      text: 'Delete',
      action: {
        url: `myapp://page/delete-item?id=XXX&action=${JSON.stringify(deletePostAction)}`,
      }
    };

    optionsArray  = [deletePostOption];

Как вы можете видеть, у массива опций есть вложенный JSON с URL-адресом внутри него. Мне нужно структурировать URL-адрес внутриdeletePostOption ..

Но он делает его строковым дважды и создает непарсируемую основную глубокую ссылку ..

myapp://page/open-slideup-menu?params={"header_text":"Post Options","cancel_text":"Cancel","options":[{"text":"Delete","action":{"url":"myapp://page/delete-item?id=XXX&action={\"url\":\"https://api.com/posts/XXX\",\"method\":\"DELETE\"}"}}]}

вложенный второй URL-адрес в has \ "в нем .. SO, который делает егоinparsable ..

Любой чистый способ сделать это без .replace(/^\\"g/,'"'), чтобы все URL-адреса и глубокие ссылки были правильно закодированы, и это работает для большего количества вложенных URL-адресов

Мой идеальный вывод был бы чем-токак это

myapp://page/open-slideup-menu?params={"header_text":"Post Options","cancel_text":"Cancel","options":[{"text":"Delete","action":{"url":"myapp://page/delete-item?id=XXX&action={"url":"https://api.com/posts/XXX","method":"DELETE"}"}}]}

Или, если какой-либо другой стандартный вывод используется в производственных системах, пожалуйста, дайте мне знать

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