Как добавить объект JSON в вызов API - PullRequest
0 голосов
/ 31 марта 2020

У меня есть x количество объектов в массиве, которые создаются динамически. Я хочу сохранить эти объекты отдельно, отправив их через API. Проблема может быть х количество объектов. Что было бы лучшим способом написать al oop, чтобы прочитать имя атрибута и его значение атрибута и поразить API, затем прочитать второй атрибут и его значения и поразить API.

Так что в основном в одно время API сохранит только один объект. т.е.

{
        "attributeName": "s1",
        "attributeValues": [
          "a",
          "b"
        ]
      }

Мой JSON Объект выглядит следующим образом:

[
  {
    "attributeName": "s1",
    "attributeValues": [
      "a",
      "b"
    ]
  },
  {
    "attributeName": "s2",
    "attributeValues": [
      "c",
      "d"
    ]
  },
  {
    "attributeName": "d1",
    "attributeValues": [
      "p",
      "q"
    ]
  },
  {
    "attributeName": "d2",
    "attributeValues": [
      "r",
      "s"
    ]
  },
  {
    "attributeName": "",
    "attributeValues": [
      ""
    ]
  },
  {
    "attributeName": "d2",
    "attributeValues": [
      "r",
      "s"
    ]
  }
]

Я хочу выбрать имя атрибута и его значение, а затем отправить его в API.

В качестве альтернативы, скажем, я сохраняю все JSON в API, тогда как я могу отфильтровать отдельный объект, если я заранее не знаю имени атрибута. Какой другой подход может быть там, чтобы получить список имен атрибутов.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

если вы хотите json в следующем формате

[
  {'s1':['a','b']},
  {'s2':['c','d']},
  {'d1':['p','q']},
  {'d2':['r','s']},
  {'':['']},
  {'d2':['r','s']}
]

, тогда вы можете получить вызов API для отдельного дочернего элемента или отправить весь массив.

var arr = [
  {
    "attributeName": "s1",
    "attributeValues": [
      "a",
      "b"
    ]
  },
  {
    "attributeName": "s2",
    "attributeValues": [
      "c",
      "d"
    ]
  },
  {
    "attributeName": "d1",
    "attributeValues": [
      "p",
      "q"
    ]
  },
  {
    "attributeName": "d2",
    "attributeValues": [
      "r",
      "s"
    ]
  },
  {
    "attributeName": "",
    "attributeValues": [
      ""
    ]
  },
  {
    "attributeName": "d2",
    "attributeValues": [
      "r",
      "s"
    ]
  }
];

var obj = arr.map((o1) => {
  var o = {};
  o[o1.attributeName] = o1.attributeValues;
  return o;
});

console.log(JSON.stringify(obj));
0 голосов
/ 31 марта 2020

Проверьте частоту данных. Если на FrontEnd слишком много данных, то лучше отправить в чанк. Еще можно накопить на FE и затем отправить.

async function sendAll(data) {
  let results = [];
  for (let index = 0; index < data.length; index++) {
    const result = await axios.post('url', data[index].attributeValues);
    results.push(result);
  }
}

Образец с поддельным макетом API.

// function* dataLake(data) {
//   for (let item of data) yield item;
// }
const getDataFake = data => {
  return new Promise(r => {
    setTimeout(() => {
      r(data);
    }, 100);
  });
};

async function sendAll(data) {
  let results = [];
  for (let index = 0; index < data.length; index++) {
    const result = await getDataFake(data[index].attributeValues);
    results.push(result);
  }
  return results;
}

const data = [
  {
    attributeName: "s1",
    attributeValues: ["a", "b"]
  },
  {
    attributeName: "s2",
    attributeValues: ["c", "d"]
  },
  {
    attributeName: "d1",
    attributeValues: ["p", "q"]
  },
  {
    attributeName: "d2",
    attributeValues: ["r", "s"]
  },
  {
    attributeName: "",
    attributeValues: [""]
  },
  {
    attributeName: "d2",
    attributeValues: ["r", "s"]
  }
];
sendAll(data).then(console.log)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...