JavaScript 带有 JSON 参数的 fetch()
JavaScript fetch() with JSON parameter
我正在尝试使用 Node.JS 从 Edamam Food Nutrition api 请求营养素。他们使用 curl curl -d @food.json -H "Content-Type: application/json" "https://api.edamam.com/api/food-database/v2/nutrients?app_id=${YOUR_APP_ID}&app_key=${YOUR_APP_KEY}"
提供了这个例子
我已连续从他们的食品数据库 API 中获取数据,其中唯一的参数是 URL。这个需要 JSON 和 URL。我硬编码了 JSON 以正确调用 API。我得到的回应是
{
“错误”:“bad_request”,
“消息”:“无法解析实体”
}
需要更改哪些内容才能获得良好的响应?
const url = 'https://api.edamam.com/api/food-database/v2/nutrients?app_id=' + nutrition_app_id + '&app_key=' + nutrition_app_key;
var myFood = '{"ingredients": [ { "quantity": 2, "measureURI": "http://www.edamam.com/ontologies/edamam.owl#Measure_ounce", "foodId": "food_akjf74ibll2id8aqb8xbha4t4axl"} ]}';
postData(url, myFood, res)
.then((data) => {
res.send(data);
})
.catch((error) => console.log(error));
这是 postData() 函数
async function postData(url = '', data, res) {
console.log(data);
const response = await fetch(url, {
method: 'POST',
cache: 'no-cache',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json();
}
您的数据 myFood
已经是 JSON 字符串,因此无需在 postData
函数中使用 JSON.stringify(data)
将其转换为字符串。
解决此问题的简单方法 - 确保数据对象始终是 JSON 对象。
var myFood = {
"ingredients": [
{
"quantity": 2,
"measureURI": "http://www.edamam.com/ontologies/edamam.owl#Measure_ounce",
"foodId": "food_akjf74ibll2id8aqb8xbha4t4axl",
},
]
}; // object instead of string
由于您使用 JSON.stringify 序列化数据,因此在定义 myFood
变量时删除引号。
你现在定义它的方式是一个字符串,而你实际上想要定义一个对象。
var myFood = { "ingredients": [ { "quantity": 2, "measureURI": "http://www.edamam.com/ontologies/edamam.owl#Measure_ounce", "foodId": "food_akjf74ibll2id8aqb8xbha4t4axl"}
] };
比较这两个:
JSON.stringify('{"ingredients":[]}');
// yields '"{\"ingredients\":[]}"'
JSON.stringify({"ingredients":[]});
// yields '{"ingredients":[]}'
我正在尝试使用 Node.JS 从 Edamam Food Nutrition api 请求营养素。他们使用 curl curl -d @food.json -H "Content-Type: application/json" "https://api.edamam.com/api/food-database/v2/nutrients?app_id=${YOUR_APP_ID}&app_key=${YOUR_APP_KEY}"
我已连续从他们的食品数据库 API 中获取数据,其中唯一的参数是 URL。这个需要 JSON 和 URL。我硬编码了 JSON 以正确调用 API。我得到的回应是
{ “错误”:“bad_request”, “消息”:“无法解析实体” }
需要更改哪些内容才能获得良好的响应?
const url = 'https://api.edamam.com/api/food-database/v2/nutrients?app_id=' + nutrition_app_id + '&app_key=' + nutrition_app_key;
var myFood = '{"ingredients": [ { "quantity": 2, "measureURI": "http://www.edamam.com/ontologies/edamam.owl#Measure_ounce", "foodId": "food_akjf74ibll2id8aqb8xbha4t4axl"} ]}';
postData(url, myFood, res)
.then((data) => {
res.send(data);
})
.catch((error) => console.log(error));
这是 postData() 函数
async function postData(url = '', data, res) {
console.log(data);
const response = await fetch(url, {
method: 'POST',
cache: 'no-cache',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return response.json();
}
您的数据 myFood
已经是 JSON 字符串,因此无需在 postData
函数中使用 JSON.stringify(data)
将其转换为字符串。
解决此问题的简单方法 - 确保数据对象始终是 JSON 对象。
var myFood = {
"ingredients": [
{
"quantity": 2,
"measureURI": "http://www.edamam.com/ontologies/edamam.owl#Measure_ounce",
"foodId": "food_akjf74ibll2id8aqb8xbha4t4axl",
},
]
}; // object instead of string
由于您使用 JSON.stringify 序列化数据,因此在定义 myFood
变量时删除引号。
你现在定义它的方式是一个字符串,而你实际上想要定义一个对象。
var myFood = { "ingredients": [ { "quantity": 2, "measureURI": "http://www.edamam.com/ontologies/edamam.owl#Measure_ounce", "foodId": "food_akjf74ibll2id8aqb8xbha4t4axl"}
] };
比较这两个:
JSON.stringify('{"ingredients":[]}');
// yields '"{\"ingredients\":[]}"'
JSON.stringify({"ingredients":[]});
// yields '{"ingredients":[]}'