从单独的 json 对象中的值在 React.js 中创建一个新对象
Create a new object in React.js from the values in a separate json object
我有一个 json 对象,我想从中获取一些值以在 React.js 中创建一个新对象。但是,无论我尝试什么,我都会收到与未定义的值或键相关的错误。
Json
{
"meat":{"drink":"Bovril", "courses":{ "main":"chicken", "pudding":"jelly" },
"vegetarian":{"drink":"milkshake", "courses":{"main":"cheese","pudding":"ice cream"},
"vegan":{"drink":"spinach juice", "courses":{"main":"lettuce","pudding":"apple"}
}
想要的结果
我想动态创建一个名为 defaultValues 的对象,如果我要对其进行硬编码,它与以下内容匹配。如您所见,这是根据上述 json 文件中的值创建的:
const defaultValues: {
meat: "chicken",
vegetarian: "cheese",
vegan: "lettuce"
}
我已经根据the answer to a similar question尝试了以下方法,但它不起作用:
我的尝试
const json = Json; //this contains the contents of my json file above
const defaultValues = {};
Object.keys(json).forEach(function(key) {
defaultValues[key.meat].push([key.courses.main]);
});
错误
我不断收到以下错误:
×TypeError: Cannot read property 'push' of undefined
任何人都可以建议如何做到这一点?
非常感谢,
凯蒂
不完全确定我是否正确阅读了你的问题,但如果你试图生成
const defaultValues: {
meat: "chicken",
vegetarian: "cheese",
vegan: "lettuce"
}
来自这个 json 对象 -(通过验证器将其卡住但结果不满意,这是更正后的格式)
const Json= {
"meat": {"drink": "Bovril","courses": {"main": "chicken","pudding": "jelly"}},
"vegetarian": {"drink": "milkshake","courses": {"main": "cheese","pudding": "ice cream"}},
"vegan": {"drink": "spinach juice","courses": {"main": "lettuce","pudding": "apple"}}
}
那么下面应该可以工作
const json = Json; //this contains the contents of my json file above
const defaultValues = {};
Object.keys(json).forEach(function(key) {
defaultValues[key] = json[key].courses.main;
});
您收到错误的原因是您在对象上使用数组方法。您的 defaultValues 是一个对象 {}
另一个问题是 json 是一个字符串,您需要先将字符串解析为一个对象。您的某些 json.
也缺少结束花括号
这是我对您的代码的看法:
const json = `{
"meat": {
"drink": "Bovril", "courses": { "main": "chicken", "pudding": "jelly" }},
"vegetarian": {
"drink": "milkshake", "courses": { "main": "cheese", "pudding": "ice cream" }},
"vegan": {
"drink": "spinach juice", "courses": { "main": "lettuce", "pudding": "apple" }}
}`;
const menu = JSON.parse(json)
const defaultValues = {};
Object.entries(menu).forEach(function (entry) {
defaultValues[entry[0]] = entry[1].courses.main;
});
console.log(defaultValues) // -> Object {meat: "chicken", vegetarian: "cheese", vegan: "lettuce"}
Object.entries returns 一个包含对象键长度的数组以及一个包含键和值的数组。所以这只是使用 entry[0] 作为键和 entry[1] 作为值将它们映射到 defaultValues 的问题。
编辑:在 codesandbox
上添加一个工作示例
首先,我纠正了你的json。之后,我迭代 json 对象的键以创建 defaultValues 对象。在您的尝试中,您一直将对象视为数组。只有数组有 push 方法。
const json = {
"meat": {
"drink":"Bovril",
"courses":{
"main":"chicken",
"pudding":"jelly"
}
},
"vegetarian":{
"drink":"milkshake",
"courses":{
"main":"cheese",
"pudding":"ice cream"
}
},
"vegan":{
"drink":"spinach juice",
"courses":{
"main":"lettuce",
"pudding":"apple"
}
}
};
const defaultValues = {};
Object.keys(json).forEach(e => {
defaultValues[e] = json[e]["courses"].main;
});
console.log(defaultValues);
我有一个 json 对象,我想从中获取一些值以在 React.js 中创建一个新对象。但是,无论我尝试什么,我都会收到与未定义的值或键相关的错误。
Json
{
"meat":{"drink":"Bovril", "courses":{ "main":"chicken", "pudding":"jelly" },
"vegetarian":{"drink":"milkshake", "courses":{"main":"cheese","pudding":"ice cream"},
"vegan":{"drink":"spinach juice", "courses":{"main":"lettuce","pudding":"apple"}
}
想要的结果
我想动态创建一个名为 defaultValues 的对象,如果我要对其进行硬编码,它与以下内容匹配。如您所见,这是根据上述 json 文件中的值创建的:
const defaultValues: {
meat: "chicken",
vegetarian: "cheese",
vegan: "lettuce"
}
我已经根据the answer to a similar question尝试了以下方法,但它不起作用:
我的尝试
const json = Json; //this contains the contents of my json file above
const defaultValues = {};
Object.keys(json).forEach(function(key) {
defaultValues[key.meat].push([key.courses.main]);
});
错误
我不断收到以下错误:
×TypeError: Cannot read property 'push' of undefined
任何人都可以建议如何做到这一点?
非常感谢,
凯蒂
不完全确定我是否正确阅读了你的问题,但如果你试图生成
const defaultValues: {
meat: "chicken",
vegetarian: "cheese",
vegan: "lettuce"
}
来自这个 json 对象 -(通过验证器将其卡住但结果不满意,这是更正后的格式)
const Json= {
"meat": {"drink": "Bovril","courses": {"main": "chicken","pudding": "jelly"}},
"vegetarian": {"drink": "milkshake","courses": {"main": "cheese","pudding": "ice cream"}},
"vegan": {"drink": "spinach juice","courses": {"main": "lettuce","pudding": "apple"}}
}
那么下面应该可以工作
const json = Json; //this contains the contents of my json file above
const defaultValues = {};
Object.keys(json).forEach(function(key) {
defaultValues[key] = json[key].courses.main;
});
您收到错误的原因是您在对象上使用数组方法。您的 defaultValues 是一个对象 {}
另一个问题是 json 是一个字符串,您需要先将字符串解析为一个对象。您的某些 json.
也缺少结束花括号这是我对您的代码的看法:
const json = `{
"meat": {
"drink": "Bovril", "courses": { "main": "chicken", "pudding": "jelly" }},
"vegetarian": {
"drink": "milkshake", "courses": { "main": "cheese", "pudding": "ice cream" }},
"vegan": {
"drink": "spinach juice", "courses": { "main": "lettuce", "pudding": "apple" }}
}`;
const menu = JSON.parse(json)
const defaultValues = {};
Object.entries(menu).forEach(function (entry) {
defaultValues[entry[0]] = entry[1].courses.main;
});
console.log(defaultValues) // -> Object {meat: "chicken", vegetarian: "cheese", vegan: "lettuce"}
Object.entries returns 一个包含对象键长度的数组以及一个包含键和值的数组。所以这只是使用 entry[0] 作为键和 entry[1] 作为值将它们映射到 defaultValues 的问题。
编辑:在 codesandbox
上添加一个工作示例首先,我纠正了你的json。之后,我迭代 json 对象的键以创建 defaultValues 对象。在您的尝试中,您一直将对象视为数组。只有数组有 push 方法。
const json = {
"meat": {
"drink":"Bovril",
"courses":{
"main":"chicken",
"pudding":"jelly"
}
},
"vegetarian":{
"drink":"milkshake",
"courses":{
"main":"cheese",
"pudding":"ice cream"
}
},
"vegan":{
"drink":"spinach juice",
"courses":{
"main":"lettuce",
"pudding":"apple"
}
}
};
const defaultValues = {};
Object.keys(json).forEach(e => {
defaultValues[e] = json[e]["courses"].main;
});
console.log(defaultValues);