Как я могу получить объект из json в ответ?

мне нужно получить некоторые данные из сложных объектов json (в моем случае это: valor_custo_fornecedor из объекта detalhe, как я могу это сделать? Как я могу получить объект из json в ответ?

я уже пробовал с такими аксиомами:

const [valorCusto, setValorCusto] = useState([]);

useEffect(() => {
  axios.get('MY API LINK').then((res) => {
    let valor = res.detalhe.valor_custo_fornecedor;

    setValorCusto(res.valorCusto.valor_custo_fornecedor);
  });
});

Ваш ответ представляет собой массив объектов. Либо выполните цикл по массивам, либо выберите нужный индекс из массивов.

Emiel Zuurbier 02.02.2023 13:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
86
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

После настройки ответа в setValorCusto ; вы можете перебрать переменную состояния и получить желаемое значение

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

DSDmark 04.02.2023 04:17

Как и в других ответах. То, что вы возвращаете из своего API, представляет собой массив объектов. В настоящее время в вашем коде этот массив находится внутри объекта ответа. Итак, в этом фрагменте ниже:

axios.get('MY API LINK').then((res) => {
    let valor = res.detalhe.valor_custo_fornecedor;

Вам нужно указать, из какого элемента массива вы хотите получить объект detalhe (например, res[0].detalhe).

Один из способов, который вы могли бы сделать, если хотите использовать все из массива, — это сохранить весь массив в вашем useState. После этого вы можете перебрать массив и что-то сделать с объектами внутри него.

PS. Если вы не совсем уверены, что государство держит. Вы можете войти на страницу, выполнив что-то вроде <div>{JSON.stringify(valorCusto)}</div>

export default function App() {
  const [valorCusto, setValorCusto] = useState(null);

  useEffect(() => {
    const getData = async () => {
      const res = await axios.get("API");
      const data = await res.data;
      setValorCusto(data);
    };
    getData();
  }, []);
  return (
    <main>
      <div>
        {valorCusto.map((item) => {
          <div>{item.id}</div>;
        })}
      </div>
    </main>
  );
}

Вы можете преобразовать json следующим образом:

useEffect(() => {
  axios.get('MY API LINK').then((res) => {
    let obj = JSON.parse(res.detalhe.valor_custo_fornecedor)
  });
});
Ответ принят как подходящий

Трудно сказать, не видя полного json, какие пары ключ/значение существуют в данных, но из того, что я вижу, вы передаете значение, которого, похоже, не существует в данных, в setValorCusto, а именно: res.valorCusto.valor_custo_fornecedor

Я предполагаю, что вы хотите передать setValorCusto переменную valor, которую вы определили выше? Однако res.data.detalhe, как ответили другие, представляет собой массив, который вам придется либо перебирать, либо указывать для него индекс.

Еще одна деталь, не относящаяся к вопросу сама по себе, заключается в том, что я бы добавил массив зависимостей для эффекта, чтобы этот запрос API не вызывался при каждом повторном рендеринге компонента. Таким образом, конечный результат будет выглядеть примерно так:

const [valorCusto, setValorCusto] = useState([]);

useEffect(() => {
  axios.get('MY API LINK').then((res) => {
    const valor = res.data.detalhe.map((detalheItem) => {
        return detalheItem.valor_custo_fornecedor;
    });

    setValorCusto(valor);
  });
}, []);

Обратите внимание на пустой массив в качестве второго параметра в вызове useEffect. Это означает, что эффект будет запущен только при первоначальном рендеринге компонента.

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

консоль говорит: Uncaught (в обещании) TypeError: невозможно прочитать свойства undefined (чтение «valor_custo_fornecedor»)

Vinicius Mariano 02.02.2023 14:07

Я только что отредактировал, потому что понял, что пропустил, что res.detalhe — это массив объектов, поэтому вам нужно перебрать этот массив (как в моем отредактированном ответе), чтобы получить все значения, или указать индекс, например res.detalhe[0].valor_custo_fornecedor. Дай мне знать, если это работает!

MrElephants 02.02.2023 14:10

Учитывая, что вы установили состояние по умолчанию для valorCusto как пустой массив, я предположил, что вы хотите получить массив со значениями.

MrElephants 02.02.2023 14:18

я думаю, вы правы, но я консоль показывает так: Uncaught (в обещании) TypeError: не удается прочитать свойства неопределенного (чтение «карты»)

Vinicius Mariano 02.02.2023 14:25

я думаю, что мы должны закрыть, ха-ха, но теперь ошибка: Uncaught (в обещании) SyntaxError: «[object Object]» недействителен JSON в JSON.parse (<anonymous>)

Vinicius Mariano 02.02.2023 14:55

Ах хорошо! Я понял, что вам также нужно получить доступ к res.data с помощью axios, чтобы получить фактические данные json, возвращаемые запросом. Я обновил свой ответ этим!

MrElephants 02.02.2023 14:56

А также то, что вам не нужно его анализировать, потому что я думаю, что Axios делает это по умолчанию.

MrElephants 02.02.2023 14:57

привет вернуться к ошибке карты

Vinicius Mariano 02.02.2023 14:59

Что вы получите, если зарегистрируете ответ с помощью console.info(res.data)? Потому что кажется, что не найти detalhe на всех.

MrElephants 02.02.2023 15:04

я делаю console.info(valorCusto)

Vinicius Mariano 02.02.2023 15:11

О, подожди. Значит, ошибка карты не происходит в запросе axios.get? Потому что я имел в виду, что кажется, что res.data.detalhe не определено, и я хотел посмотреть, как выглядит res.data, чтобы выяснить, получаем ли мы вообще правильный ответ, регистрируя его после того, как запрос сделан!

MrElephants 02.02.2023 15:13

поэтому, если вы добавите console.info(res.data) над определением valor, что он запишет, когда вы его запустите?

MrElephants 02.02.2023 15:17

это: Uncaught (в обещании) TypeError: невозможно прочитать свойства undefined (чтение «карты»)

Vinicius Mariano 02.02.2023 15:20

Разве это не регистрирует ничего выше этого? Пока закомментируйте все остальное в обратном вызове .then, потому что это может помешать приложению запустить console.info(res.data)

MrElephants 02.02.2023 15:25

так: axios.get('MY API LINK').then((res) => console.info(res.data));

MrElephants 02.02.2023 15:27

Это просто временно, чтобы увидеть, что мы действительно получаем правильные данные.

MrElephants 02.02.2023 15:29

Да, и просто чтобы убедиться, что вы заменили 'MY API LINK' фактической конечной точкой API, верно?

MrElephants 02.02.2023 15:34

Я уже изменил api, это была просто запятая, поэтому в карте была ошибка, теперь она работает правильно, помогите

Vinicius Mariano 02.02.2023 17:07

Ах! Отлично, рад слышать, что все получилось!

MrElephants 02.02.2023 20:41

Другие вопросы по теме