为什么PHP用“"”返回JSON?

时间:2019-09-17 11:41:22

标签: php json double-quotes nusoap

我正在为Web服务使用WSDL。因此,我创建了一个WSDL页面并添加了一个功能。该函数是,连接我的表并返回JSON值。当我在其他PHP页面上调用此函数时,我会成功获取值。

[{"ID":"1","Number":"1"}]

但是,当我在WSDL页面中调用此函数时,会得到它:

[{"ID":"1","Number":"1","}]

这是我在WSDL中的功能:

public function A($a1,$a2,$a3,$o1) 
    {
    include "../conf/database.php";
    $SQL = "SELECT * FROM table_users";  
    $SQLResult=mysqli_query($conn,$SQL);
    while($row=mysqli_fetch_assoc($SQLResult))
    {
        $JSON[] = $row;
    }
    return json_encode($JSON,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_QUOT | JSON_HEX_APOS);
    }

我找到了很多解决方案,但是没有用。我尝试 preg_replace,替换,但不能。我该如何解决这个问题?

我的WSDL PHP页面:

<?php
require_once "lib/nusoap.php";
$JSON= array();

    public function A($a1,$a2,$a3,$o1) 
    {
    include "../conf/database.php";
    $SQL = "SELECT * FROM table_users";  
    $SQLResult=mysqli_query($conn,$SQL);
    while($row=mysqli_fetch_assoc($SQLResult))
    {
        $JSON[] = $row;
    }
    return json_encode($JSON,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_QUOT | JSON_HEX_APOS);
    }

$server = new soap_server();
$server->configureWSDL("TryFunc", "MyURL");
  $server->wsdl->addComplexType('A',
    'complexType',
    'struct',
    'all',
    '',
    array(
            'a1' => array('name' => 'a1', 'type' => 'xsd:string'),
            'a2' => array('name' => 'a2', 'type' => 'xsd:string'),
            'a3' => array('name' => 'a3', 'type' => 'xsd:int'),
            'o1' => array('name' => 'o1', 'type' => 'xsd:string'),
    )
);
$server->register('A',                   
  array('a1' => 'xsd:string', 'a2' => "xsd:string",'a3' => "xsd:int",'o1' => "xsd:string"),      
   array("return" => "xsd:string"),
    "",
    "",
    "rcp",
    "encoded",
    "document");

@$server->service(file_get_contents("php://input"));

1 个答案:

答案 0 :(得分:-1)

非常简单:JSON不允许使用单引号。

至少在您使用PHP时,这实际上是违反直觉的,因为双引号将输出变量,单引号将输出文字变量名本身。尽管我个人认为这是一个缺陷,但为什么JSON严格首选双引号并不是我个人所知。在Duck Duck Go和Google上的搜索中,我找不到为什么。您可以研究原始作者道格拉斯·克罗克福德(Douglas Crockford),并查看他所编程的编程语言,因为它可能是PHP的反向,疏忽,热心的信念等。