尝试将JSON发送到Java Web Service时遇到问题。我使用cURL发布JSON但是Web服务响应我发送的参数为NULL,请参阅下面的错误消息。
$data = "{'firstname': 'tom', 'surname' : 'tom', 'companyName' : 'test','phone' : 01234567, 'email' : 'test@test.com'}";
$ch = curl_init('http://10.50.1.71:8080/SME/api/details.json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($buildApplicationJSON))
);
$result = curl_exec($ch);
var_dump($result);
我得到的回应是 -
的字符串(1042) “{” 错误 “:[{” 对象 “:” com.application.AppDetails “ ”字段“: ”姓名“, ”拒绝值“:空, ”消息“:” 属性 类[com.application.AppDetails]类的[firstname]不能 空 “},{” 对象 “:” com.application.AppDetails “ ”字段“: ”姓“, ”拒绝值“:空, ”消息“:” 属性 类[com.application.AppDetails]类的[姓]不能 空 “},{” 对象 “:” com.application.AppDetails “ ”字段“: ”的companyName“, ”拒绝值“:空, ”消息“:” 属性 类[com.application.AppDetails]类的[companyName]不能 空 “},{” 对象 “:” com.application.AppDetails “ ”字段“: ”电话“, ”拒绝值“:空, ”消息“:” 属性 类[com.application.AppDetails]类的[phone]不能 空 “},{” 对象 “:” com.application.AppDetails “ ”字段“: ”电子邮件“, ”拒绝值“:空, ”消息“:” 属性 类[com.application.AppDetails]类的[email]不能 空 “},{” 对象 “:” com.application.AppDetails “ ”字段“: ”源代码“, ”拒绝值“:空, ”消息“:” 属性 类[com.application.AppDetails]类的[sourceCode]不能 空 “}]}”
更新:仍然无法正常工作。 $ data JSON行不是问题。在我之前的版本中,我有一个数组并使用了json_encode
$buildApplication = array(
'firsname' => 'Keith',
'surname' => 'Francis',
'companyName' => 'Keiths Mobile Discos',
'phone' => '07123456789',
'email' => 'keith.francis@freedom-finance.co.uk',
'sourceCode' => 'W00T'
);
$data = json_encode($buildApplication);
$ch = curl_init('http://10.50.1.71:8080/SME/api/details.json');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($buildApplicationJSON))
);
$result = curl_exec($ch);
var_dump($result);
答案 0 :(得分:3)
您的JSON不正确。查看此jsfiddle的结果。
现在您可以将此字符串重写为正确的JSON,但这很容易出错。
相反,让json_encode
为您完成工作。
将$data
定义为PHP数组:
$data = ['firstname' => 'tom', 'surname' => 'tom', 'companyName' => 'test', 'phone' => 01234567, 'email' => 'test@test.com'];
如果要将其传递给curl
,请使用json_encode
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
更好的是,尝试事先对其进行编码并检查它是否已成功编码。
if( $jsondata = json_encode($data) ){
//$jsondata is valid json
}
答案 1 :(得分:0)
您发送的字符串是不是有效的JSON。这就是接收方无法从中提取值的原因。
请注意:
之间存在差异{'firstname': 'tom', 'surname' : 'tom', 'companyName' : 'test','phone' : 01234567, 'email' : 'test@test.com'}
和
{"firstname": "tom", "surname": "tom", "companyName": "test", "phone": 342391, "email": "test@test.com"}
如果你使用phps json编码函数而不是尝试硬编码,通常是最安全的:
<?php
$data = json_encode([
'firstname' => 'tom',
'surname' => 'tom',
'companyName' => 'test',
'phone' => 01234567,
'email' => 'test@test.com'
]);