Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将PHP对象转换为OpenAPI 3的JSON fromat_Php_Json_Validation_Openapi - Fatal编程技术网

如何将PHP对象转换为OpenAPI 3的JSON fromat

如何将PHP对象转换为OpenAPI 3的JSON fromat,php,json,validation,openapi,Php,Json,Validation,Openapi,我目前正在使用OpenAPI 3.0.2为PHP项目开发API。 问题是我已经得到了嵌套的php数组,我想根据它描述一个OpenAPI模式,并将此数据作为JSON发送到POST请求体中进行测试 以下是我想要转换为JSON的PHP数据: [[ 'question' => 'Do you have an active mobile money account?' 'answers' => [ [

我目前正在使用
OpenAPI 3.0.2
为PHP项目开发API。 问题是我已经得到了嵌套的php数组,我想根据它描述一个
OpenAPI
模式,并将此数据作为JSON发送到POST请求体中进行测试

以下是我想要转换为JSON的PHP数据:

    [[
        'question'    => 'Do you have an active mobile money account?'
        'answers'     => [
            [
                'label'  => 'A.',
                'text'   => 'Yes',
                'custom' => false,
                'value'  => 'yes',
            ],
            [
                'label'  => 'B.',
                'text'   => 'No',
                'custom' => false,
                'value'  => 'no',
            ]
        ],
    ],...]
这是一个JSON,我已经尝试过了,但是它与数据对象不匹配(服务器验证失败)

openapi.json

"example":{
    "survey": [
                {
                  "question": "mobile money account",
                  "answers": [
                    [[{"label":"A."},{"text": "Yes"},{"custom": false},{"value":"yes"}]]
                  ]
                },
     ...
}
注意验证仅在
“answers”
属性上失败

编辑: 使用
json\u decode($arr,true)
可以提供以下信息:

"answers": [
                {
                  "label": "A.",
                  "text": "Yes",
                  "custom": false,
                  "value": "yes"
                },
                {
                  "label": "B.",
                  "text": "No",
                  "custom": false,
                  "value": "no"
                }
              ]

但是服务器仍然会响应一个错误,即“answers”无效

JSON中的每个对象都对应一个单独的关联数组(或PHP对象,但我们将在这里讨论数组)

因此,要获取此类JSON
“answer”
属性的值:

[
     [[{"label":"A."},{"text": "Yes"},{"custom": false},{"value":"yes"}]]
]
我们需要一个“关联数组数组数组数组”

因此,在PHP中应该是:

 [[[
    ["label" => "A."],
    ["text" => "Yes"],
    ["custom" => false],
    ["value" => "yes"]
]]]
注意
对我来说,在预期的结构中似乎有太多嵌套,但不管怎样-这就是您所说的您想要的。

显示完整的php数组数据。如果是这样的话——

$d =  [[
    'question'    => 'Do you have an active mobile money account?',
    'answers'     => [
        [
            'label'  => 'A.',
            'text'   => 'Yes',
            'custom' => false,
            'value'  => 'yes',
        ],
        [
            'label'  => 'B.',
            'text'   => 'No',
            'custom' => false,
            'value'  => 'no',
        ]
    ],
],

];
然后需要使用json_encode($d,true)

您显示为“json_encode的输出”的内容不是json_encode的实际输出。它永远不会向您显示关联数组,因为它在JSON中不存在。它永远不会给你类似于
['label'=>'A.',
的东西

我将答案输入json_encode,以下是我得到的:

“‘答案’=>[ [ “标签”=>“A.”, “文本”=>“小于500 UGX”, “自定义”=>错误, “值”=>“<500 UGX”, ]]"

这是错误的。这不是json_encode的输出。请参阅下面的代码

我认为问题在于
答案的维度。您的数组似乎太深了:

“答案”:[
[

注意3打开数组括号



你的意思是
json\u encode($theArray)
你试过json\u encode($phparray,true);?@riggsfully我现在已经测试过了(仅回答属性),它返回一个非常奇怪的输出显示输出(编辑你的问题)并告诉我们itI的错误。我认为OP在这里混淆了很多东西,并且一定有影响输出和行为的代码,这在问题中没有显示。很抱歉,您进行了反向转换。我无法修改PHP数组,因为它是由另一个开发人员提交的。我需要检索JSON表示,但我无法理解nd这里出了什么问题我不明白。你有一个PHP数组,想要得到它的JSON表示,它有一个特定的结构。这是正确的吗?如果是这样,你需要准备合适的PHP数组-如果你不能“触摸它”,它可能是“其他开发人员提交的”(不管它是什么意思)的副本))-然后转到
json\u encode
。仅此而已。你到底不明白什么?当然,你可以将任何PHP数组转换为任何你喜欢的格式,然后再以json格式输出。我认为Jakub使用嵌套是正确的,只是得出了相同的结论。我可能会删除我的答案,因为你的答案大致相同……我这里没有使用变量。这个项目配置中描述的p数组,但我目前正在处理OpenAPI 3文档=>编写OpenAPI.json这不是答案,这是注释,而且语法错误。
json\u encode()
采用
整数
选项(位掩码)作为第二个参数,不是布尔值。布尔值用于
json\u decode
告诉PHP是将json转换为关联数组还是对象。
$x = [[
        'question'    => 'Do you have an active mobile money account?',
        'answers'     => [
            [
                'label'  => 'A.',
                'text'   => 'Yes',
                'custom' => false,
                'value'  => 'yes',
            ],
            [
                'label'  => 'B.',
                'text'   => 'No',
                'custom' => false,
                'value'  => 'no',
            ]
        ]
]];

echo json_encode($x, JSON_PRETTY_PRINT);

// Output:

[
    {
        "question": "Do you have an active mobile money account?",
        "answers": [
            {
                "label": "A.",
                "text": "Yes",
                "custom": false,
                "value": "yes"
            },
            {
                "label": "B.",
                "text": "No",
                "custom": false,
                "value": "no"
            }
        ]
    }
]