【问题标题】:how to convert array api response to json in JavaScript如何在 JavaScript 中将数组 api 响应转换为 json
【发布时间】:2020-01-16 22:44:15
【问题描述】:

我有一个返回数据结构如下的 api:

//代码 返回 response.status(200).json(startdate)

结果数据:

[
    "2020-01-16",
    "2020-01-18",
]

我希望这个 api 返回这样的结果:

Code: 200
Content:
{
    "availableDates": [
      "2017-11-24",
      "2017-11-27"
    ],
    "status": "SUCCESS",
    "message": ""
}

这是我以数组形式获取数据的完整代码

app.get('/api/getBusyDays',(request, response) =>{
    odoo.connect(function (err) {



        console.log(' OdooStartDate' + dateTimeStartUsed + 'OdooStopdate' + dateTimeEndUsed);
        var params1 = [];
        params1.push(inParams1);

        console.log(' search params '+ JSON.stringify(params1));
        odoo.execute_kw('calendar.event', 'search_read', params1, function (err, value) {
            if (err) { return console.log(err) }
            if(value) {
                if (value.length > 0) {


                    value.forEach(function(a) {
                        a.start_datetime = moment(a.start_datetime).format('YYYY-MM-DD');
                        a.stop_datetime = moment(a.stop_datetime).format('YYYY-MM-DD');
                    });

                    const startdate = [...new Set(value.map(val => val.start_datetime))];

                    startdate.sort();


                   // return response.status(200).json( value)

                    return response.status(200).json(startdate)
                }
            }

【问题讨论】:

  • 那么问题出在哪里?
  • 不知道如何转换

标签: javascript arrays javascript-objects


【解决方案1】:

你可以像这样创建一个对象:

let arrVal = [
  "2017-11-24",
  "2017-11-27"
];
// return Object or your framework (Express or KOA or) response Object
console.log({
  "Code": 200,
  "Content": {
    "availableDates": arrVal,
    "status": "SUCCESS",
    "message": ""
  }
})

更新

根据此答案的 cmets,修改您的回复,使其如下所示:

app.get('/api/getBusyDays',(request, response) =>{
    odoo.connect(function (err) {



        console.log(' OdooStartDate' + dateTimeStartUsed + 'OdooStopdate' + dateTimeEndUsed);
        var params1 = [];
        params1.push(inParams1);

        console.log(' search params '+ JSON.stringify(params1));
        odoo.execute_kw('calendar.event', 'search_read', params1, function (err, value) {
            if (err) { return console.log(err) }
            if(value) {
                if (value.length > 0) {


                    value.forEach(function(a) {
                        a.start_datetime = moment(a.start_datetime).format('YYYY-MM-DD');
                        a.stop_datetime = moment(a.stop_datetime).format('YYYY-MM-DD');
                    });

                    const startdate = [...new Set(value.map(val => val.start_datetime))];

                    startdate.sort();


                   // return response.status(200).json( value)

                    return response.status(200).json({"code": 200, "content": {"availableDates": startdate, "status": "SUCCESS", "message": ""}})
                }
            }

【讨论】:

  • 对不起,我重新提出了我的问题,也许这个想法不清楚
  • @Alia 你有权访问 API 代码库吗?您使用的是哪个框架?
  • 我无法添加所有代码......但我的想法是 api 运行良好,只是我想要的结果不是数组,而是 json,里面有状态和消息
  • 如果你希望响应是这样的,那么你必须将响应修改为一个对象并更改前端实现,response.status(200)只修改响应头状态码而不是创建一个对象。
【解决方案2】:

您可以创建一个空对象并为其设置属性并将其作为您的节点 api 服务的响应发送。

let data = [
    "2017-11-24",
    "2017-11-27"
];

let response = [];
response.data = data;
response.code = 200;
response.status = 'success';
response.message = 'Mission Successful';

return response;

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多