如何将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"
}
]
}
]