无法在RestAPI中找出HTML cURL到身体部位的JavaScript json

时间:2018-07-17 21:33:19

标签: javascript rest api http curl

我正在尝试使用moneybird api(documentation)通过XHR发布方法将收据上载到我的帐户。 我的连接工作正常,但是我似乎无法弄清楚(经过大量的搜索并查看了实际示例之后)如何将帖子的cURL数据部分解析为JavaScript兼容的部分(如果我是json,我正确吗?)。

这是moneybird在其文档中提供的示例:

curl -s -H "Content-Type: application/json" -H "Authorization: Bearer 84ec207ad0154a508f798e615a998ac1fd752926d00f955fb1df3e144cba44ab" \ -XPATCH \ -d '{"receipt":{"details_attributes":{"0":{"id":226902553790514831,"description":"updated description","price":20}}}}' \ https://moneybird.com/api/v2/123/documents/receipts/226902553785271950.json

这是我需要以某种方式解析/转换的部分:'{"receipt":{"details_attributes":{"0":{"id":226902553790514831,"description":"updated description","price":20}}}}' \

要适合我的JavaScript代码:

var XMLHttpRequest = require('xhr2');
var request = new XMLHttpRequest();

request.open('POST', 'https://moneybird.com/api/v2/myId/documents/receipts');

request.setRequestHeader('Authorization', 'Bearer myApiKey');
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Accept', 'application/json');

request.onreadystatechange = function () {
    if (this.readyState === 4) {
        console.log('Status:', this.status);
        console.log('Headers:', this.getAllResponseHeaders());
        console.log('Body:', this.responseText);
    }
};

var body = "cURL/converted json has to be in this place"


request.send(body); 

如果有帮助,文档中也有一个红宝石示例,但是由于我对这种语言不熟悉,所以对我没有太大帮助。

尽管它可以在网站上运行,但我更喜欢使用JavaScript,但是如果您有其他/更好的解决方案,我很乐意尝试。

1 个答案:

答案 0 :(得分:0)

示例中提供的cURL数据结构在格式化为JSON时如下所示:

{  
   "receipt":{  
      "details_attributes":{  
         "0":{  
            "id":226902553790514831,
            "description":"updated description",
            "price":20
         }
      }
   }
}

我假设您需要使用要发布的正确值填充ID,说明和价格。如果您需要发布多个订单项,则可以在“ details_attributes”对象中添加其他条目。如下所示:

{  
   "receipt":{  
      "details_attributes":{  
         "0":{  
            "id":226902553790514831,
            "description":"updated description",
            "price":20
         },
         "1":{  
            "id": "Another ID",
            "description":"Another Description",
            "price": "Another Price"
         }
      }
   }
}

一旦在body变量中定义了有效负载,就需要将其转换为JSON字符串,然后使用XHR.send()将其发布,如下所示:

request.send(JSON.stringify(body));

我还建议您研究“ fetch”或“ axios”之类的内容,以简化请求流程。

最后快速阅读文档,您还需要更改Moneybird的API端点,使其包含“ .json”

var myId = 123; 
request.open('POST', `https://moneybird.com/api/v2/${myId}/documents/receipts.json`);