请教关于 PHP 的 json_encode 问题,是不是它的格式跟 Python , Java 生成的有些不一样?

2019-06-23 09:07:12 +08:00
 LeeLou
以下是一个 soap 的接口,往该接口的 funMain 方法上,传输一个 json,就可以发送短信了。这个是 php 的代码,显示失败
$url = 'http://***/wsApi?wsdl';
$content=’ this is a test message';
$funcode = '1002'; //自定义扩展代码(模块)
$ApplicationID = 'HsqjSYsn6QjTrqzdW'; //账号
$Password = '6VnLZlVwKf'; //密码
$paras = array(
'content' =>$content,
'funCode' =>$funcode,
'applicationId' =>$ApplicationID,
'password' =>$Password);

$sendInfo=array(
'sendId' =>'0',
'mobile' =>'18899990000'); //手机号码
$paras['sendInfo'] ][0]=$sendInfo;
$client = new soapclient($url);
$result=$client->funMain(json_encode($paras));

而用 python,是没有问题的。
import sys
import json
import suds

from suds.client import Client

url='http://***/wsApi?wsdl'
c=Client(url)

def sms(phonenumber,text):

data={\
'applicationId': 'HsqjSYsn6QjTrqzdW5K',\
'password': '6VnLZlVw',\
'funCode': '1002',\
'content': 'this is for what you want to sent',\
'sendInfo': [\
{\
'sendId': '0',\
'mobile': '188990000'\
}\
]\
}



data['content']=text
data['sendInfo'][0]['mobile']=phonenumber
d=json.dumps(data)


e=c.service.funMain(d)






if __name__=='__main__':

if len(sys.argv)!=3:

print ('Usage:python need 2 string')

exit(1)

phonenumber=sys.argv[1]

text=sys.argv[2]

try:

sms(phonenumber,text)
except:
print ('duanxinji failure')
4690 次点击
所在节点    PHP
22 条回复
LeeLou
2019-06-25 10:48:43 +08:00
@encro 肉眼看不出区别的。 而且也把 python 生成的 encode 结果复制到 php 里作为字符串了,也是不能正常工作
cquptzzq
2019-06-25 21:02:06 +08:00
找个网站把生成的 json 弄进去检查下格式就出来了。http://www.bejson.com/
php 的 json_encode()几乎不可能出错,官方的常用函数都出错,可就笑死人了。
c++和 java 倒是容易转 json 出错,最常见的就是有数字的情况,json 要求 key 是字符串,很多 java 和 c++都是拿的网上流传的方法转的 json,那些方法细节可能有问题。
我就见过 java 生成出这样的 json:
{1: "a"}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/576563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX