Как преобразовать JSON в строку параметров URL в соответствии с моим ожидаемым значением? - PullRequest
0 голосов
/ 31 мая 2019

Я работаю над угловым проектом.Для метода, получающего ответ JSON для преобразования stringify и POST тела в API, сделано.Теперь проблема в том, что для другой функции я должен отправить это значение в качестве параметра URL. Я пробовал несколько способов, но не получил ожидаемого результата.Пожалуйста, найдите приведенные ниже коды и помогите мне.Спасибо

Вот мое значение формата JSON

const bodyJSON = [{FullPackageIDs:[11,7],
                    PartialPkg:[
                        {PackageID:4,
                            FormsList:[
                                {Form_Name:"Form name One"},
                                {Form_Name:"Form name Two"}]},
                        {PackageID:6,
                            FormsList:[
                                {Form_Name:"Form name Three"},
                                {Form_Name:"Form name Four"},
                                {Form_Name:"Form name Five"}
                            ]
                        }
                    ]
                }]

Мое ожидаемое строковое значение URL, как показано ниже

http://localhost:4200/DownloadPackage?FullPackageIDs[0]=11&FullPackageIDs[1]=7&PartialPkg[0].PackageID=4&PartialPkg[0].FormsList[0].Form_Name=Form name One&PartialPkg[0].FormsList[1].Form_Name=Form name Two&PartialPkg[1].PackageID=6&PartialPkg[0].FormsList[0].Form_Name=Form name Three&PartialPkg[1].FormsList[1].Form_Name=Form name Four&PartialPkg[2].FormsList[2].Form_Name=Form name Five

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

for (let i = 0; i < getSelectedId.length; i++) {
  fullPackageParams = `${fullPackageParams}FullPackageIDs[${i}]=${getSelectedId[i]}&`;
  for (let j = 0; j < getPartialId.length; j++) {
    // const getPartialName = this.partialPackage.map(res => res[i].FormsList);
    const getPartialName = getPartialId[j].FormsList;

    partialPackageIDParams = `${partialPackageIDParams}PartialPkg[${j}].PackageID=${getPartialId[j].PackageID}&`;

    for (let index = 0; index < getPartialName.length; index++) {
      partialPackageNameParams = `PartialPkg[${index}].FormsList[${index}].Form_Name=${getPartialName[index].Form_Name}&`;
    }
  }
}
console.log('params for full packages', fullPackageParams + partialPackageIDParams + partialPackageNameParams);

1 Ответ

0 голосов
/ 31 мая 2019

даже если мне кажется странным, что вам нужно передать все эти параметры с помощью запроса, вы можете попробовать this

, он просто использует карту ES6, уменьшите функции, чтобы создать свойСтрока запроса

let URLQuery = bodyJSON.map(value => {
    const packageIDs = value.FullPackageIDs.map((v, i) => `FullPackageIDs[${i}]=${encodeURIComponent(v)}`);
    const partialPkgs = value.PartialPkg.map((v, i) => {
        const startKey = `PartialPkg[${i}]`;
        return [
            `${startKey}.PackageID=${v.PackageID}`
        ].concat(
            v.FormsList.map((v, i) => `${startKey}.FormsList[${i}].Form_Name=${encodeURIComponent(v.Form_Name)}`)
        );
    }).reduce((arr, v) => {
        return arr.concat(v)
    }, []);

    return packageIDs.concat(partialPkgs);
}).reduce((arr, v) => {
    return arr.concat(v);
}, []).join("&");

const fullURL = `https://example.com?${URLQuery}`;
...