#json #reactjs
#json #reactjs
Вопрос:
У меня есть демонстрация здесь
У меня есть простой файл json, который я импортирую, и я хотел бы выполнить цикл и вывести данные json в div
Я, вероятно, захочу выделить части json, но пока мне просто нужно иметь возможность выводить json
Нужно ли мне создавать массив из данных json, а затем сопоставлять его.
const showProductData = Object.keys(ProductData).map(function(key) {
return <div>{ProductData[key]}</div>;
});
const App = () => {
return (
<div>
<h2>JSON</h2>
{showProductData}
</div>
);
};
Комментарии:
1. вы пробовали свой код? для меня это выглядит в основном правильно. в отдельном примечании вы также можете перебирать значения объекта:
Object.values(data).map(d => <div>{d}</div>)
или записи объекта:Object.entries(data).map([key, value] => ())
— кроме того, вам, вероятно, придется указать div в функции map ключ prop reactjs.org/docs/lists-and-keys.html
Ответ №1:
Если вы прочитаете сообщение об ошибке, объекты недействительны как дочерние объекты React. Чтобы изменить ваш текущий код, чтобы просто отображать json, вам нужно будет преобразовать объект в строку.
const showProductData = Object.keys(ProductData).map(function(key) {
return <div>{JSON.stringify(ProductData[key])}</div>;
});
Чтобы быть более кратким с тем, к чему мы обращаемся, мы можем вместо этого использовать Object.values()
вместо:
const showProductData = Object.values(ProductData).map(function(value) {
return <div>{JSON.stringify(value)}</div>;
});
Для дальнейшего доступа к определенным точкам данных вы можете использовать точечную нотацию для доступа к примитивным значениям:
const showProductData = Object.values(ProductData).map(function(value) {
return <div>Weight: {value.ProductWeight}</div>;
});
Ответ №2:
ну, когда я показываю вам вопрос, я сразу подумал «рекурсивное решение» 🙂 итак, в основном это код, я попытался объяснить его, не стесняйтесь вникать в него
function getAllProps(obj) {
let value = obj;
// in case it is an object / array, which true, at any json file, at least at the beginning
if (typeof obj === "object") {
value = Object.keys(obj).map(key => {
// and then check again if the value of the 'key' is an object
// because we cant just out put object in react
if (typeof obj[key] === "object") {
// then out put the key name (property, 'ProductOne' for example)
// and call the function again since we know it is an object.
// basiclly the function will call it self again and again
// until the value will be different than 'object'
return (
<div key={key}>
<div style={{ marginLeft: 20 }}>
<strong> {key} </strong>
{getAllProps(obj[key])}
</div>
</div>
);
}
return (
<div key={key} style={{ marginLeft: 20 }}>
{key}: {obj[key]}
</div>
);
});
}
return value;
}
const products = getAllProps(ProductData);
const App = () => {
return (
<div>
<h2>JSON</h2>
{products}
</div>
);
};
на самом деле, просто проверьте эту ссылку
прочитайте комментарии, попытайтесь понять мое «рекурсивное решение»