我试图用Matlab发送以下post请求:

POST https://url.to.com/hello/world

HEADERS {"API_KEY": "abc123"}

JSON PAYLOAD

{
"return_type": "hello",
"entities": ["ent1"],
"events": ["legal"],
"fields": [],
"filters": {},
"start_date": "2015-01-01 00:00:00",
"end_date": "2016-01-01 00:00:00",
"format": "csv",
"compressed": false
}

在Matlab中,我尝试了以下操作:
API_KEY                 = 'abc123';
url                     = 'https://url.to.com/hello/world';

options                 = weboptions(...
    'MediaType', 'application/json', ...
    'HeaderFields', {...
    'API_KEY', API_KEY; ...
    'Content-Type' 'application/json'});

payload.('return_type') = 'hello';
payload.('entities')    = ['ent1'];
payload.('events')      = ['legal'];
payload.('fields')      = [];
payload.('filters')     = {};
payload.('start_date')  = '2015-01-01 00:00:00';
payload.('end_date')    = '2016-01-01 00:00:00';
payload.('format')      = 'csv';
payload.('compressed')  = 'false';

response = webwrite(url, payload, options);

但是,这将返回错误:
服务器返回状态400,消息“bad request”
对URL请求的响应
我和邮递员试过上面的要求,结果成功了。我还验证了我的Matlab头的设置是否正确。所以这必须是我的json负载部分的matlab设置。怎么了?
更新1:
我注意到当您运行jsonencode(payload)时,它不会返回所需的格式。而且,"[ .. ]"会被删除。我认为问题开始于此,因为此时请求确实无效。因此,我们需要一种方法,在必要时合并括号。

最佳答案

在另一个论坛上找到了答案。问题确实是双括号。我们需要设置如下:

payload.('entities')    = {{'ent1'}};

在此处阅读更多信息:https://nl.mathworks.com/matlabcentral/answers/217716-how-to-pass-single-element-json-arrays-using-webwrite

关于json - Matlab Webwrite中的JSON有效负载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45587780/

10-16 13:06