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":[]}'