javascript - 使用 JavaScript 从 JSON 文件中分离多个数据
问题描述
我正在尝试使用此代码显示从 API 获取的 JSON 文件中的值。
const query = 'chicken';
const uri = 'https://trackapi.nutritionix.com/v2/search/instant?query=' + query;
let appid = new Headers();
appid.append('x-app-id', '19421259')
let appkey = new Headers();
appid.append('x-app-key', '54a4e6668518084478d9025d8a5e32a2')
let req = new Request(uri, {
method: 'GET',
headers: appid,
appkey,
});
fetch(req)
.then((response) => {
if (response.ok) {
return response.json();
} else {
throw new Error('BAD HTTP stuff');
}
})
.then((jsonData) => {
console.log(jsonData);
var jsonString = JSON.stringify(jsonData);
document.write(jsonString);
})
.catch((err) => {
console.log('ERROR', err.message);
});
它成功返回 JSON 并将其转换为字符串,但是我不知道应该如何将它们分开,因为 JSON 包含多个数据(例如,搜索鸡肉会返回多个具有不同品牌和烹饪类型的鸡肉餐),如下所示:
{
"common": [{
"food_name": "chicken",
"serving_unit": "oz",
"tag_name": "chicken",
"serving_qty": 3,
"common_type": null,
"tag_id": "9",
"photo": {
"thumb": "https://d2xdmhkmkbyw75.cloudfront.net/9_thumb.jpg"
},
"locale": "en_US"
}, {
"food_name": "chickensalad",
"serving_unit": "cup",
"tag_name": "chicken salad",
"serving_qty": 0.5,
"common_type": null,
"tag_id": "1420",
"photo": {
"thumb": "https://d2xdmhkmkbyw75.cloudfront.net/1420_thumb.jpg"
},
"locale": "en_US"
}, {
"food_name": "chicken salad",
"serving_unit": "cup",
"tag_name": "chicken salad",
"serving_qty": 0.5,
"common_type": null,
"tag_id": "1420",
"photo": {
"thumb": "https://d2xdmhkmkbyw75.cloudfront.net/1420_thumb.jpg"
},
"locale": "en_US"
}, {
"food_name": "chicken broth",
"serving_unit": "cup",
"tag_name": "broth chicken",
"serving_qty": 1,
"common_type": null,
"tag_id": "3336",
"photo": {
"thumb": "https://d2xdmhkmkbyw75.cloudfront.net/3336_thumb.jpg"
},
"locale": "en_US"
}, {
"food_name": "whole chicken",
"serving_unit": "chicken",
"tag_name": "whole chicken",
"serving_qty": 1,
"common_type": null,
"tag_id": "4025",
"photo": {
"thumb": "https://d2xdmhkmkbyw75.cloudfront.net/4025_thumb.jpg"
},
"locale": "en_US"
}
我应该如何实现它以便我可以分别显示每种食物及其各自的变量?
解决方案
如果我理解正确,您正在尝试过滤作为 JSON 对象获得的数据,因此它只包括“food_name”和“tag_name”属性中保存的食物。
在这种情况下,您可以编写一个简单的函数来进行过滤,如下所示:
const getFilteredFoodsArray = food => {
food = food.toLowerCase();
return common.filter(
data =>
data.food_name.toLowerCase().includes(food) ||
data.tag_name.toLowerCase().includes(food)
);
};
然后,如果你像这样运行它:
console.log(getFilteredFoodsArray("chicken"))
你的结果是:
[
{ food_name: 'chicken',
serving_unit: 'oz',
tag_name: 'chicken',
serving_qty: 3,
common_type: null,
tag_id: '9',
photo:
{ thumb: 'https://d2xdmhkmkbyw75.cloudfront.net/9_thumb.jpg' },
locale: 'en_US' },
{ food_name: 'chickensalad',
serving_unit: 'cup',
tag_name: 'chicken salad',
serving_qty: 0.5,
common_type: null,
tag_id: '1420',
photo:
{ thumb: 'https://d2xdmhkmkbyw75.cloudfront.net/1420_thumb.jpg' },
locale: 'en_US' },
{ food_name: 'chicken salad',
serving_unit: 'cup',
tag_name: 'chicken salad',
serving_qty: 0.5,
common_type: null,
tag_id: '1420',
photo:
{ thumb: 'https://d2xdmhkmkbyw75.cloudfront.net/1420_thumb.jpg' },
locale: 'en_US' },
{ food_name: 'chicken broth',
serving_unit: 'cup',
tag_name: 'broth chicken',
serving_qty: 1,
common_type: null,
tag_id: '3336',
photo:
{ thumb: 'https://d2xdmhkmkbyw75.cloudfront.net/3336_thumb.jpg' },
locale: 'en_US' },
{ food_name: 'whole chicken',
serving_unit: 'chicken',
tag_name: 'whole chicken',
serving_qty: 1,
common_type: null,
tag_id: '4025',
photo:
{ thumb: 'https://d2xdmhkmkbyw75.cloudfront.net/4025_thumb.jpg' },
locale: 'en_US' }
]
推荐阅读
- reactjs - 如何去除 Material-UI 对话框中的阴影?
- google-cloud-build - 仅当命令由拉取请求触发时如何执行命令?
- macos - Clang 链接器“找不到 -lCocoa 的库”
- python-3.x - Django - PermissionRequiredMixin - 在当前视图中返回“permission_denied_message”,而不是 403 页面?
- sql - 何时将数据物理化到表中与保留在 redshift 中的视图中?
- azure - Aks 错误 无法耗尽节点,中止缩减
- xcode - 无法确定 URL 的 repo 类型(gitlab + Mac)
- angular - 将带有异步管道的 observable 传递给输入会导致调用 http 方法的无限循环并且不返回任何值
- php - php + html多行提交带有复选框过滤器
- web - Web 服务器属性中的图像处理