我将通过HTTP POST接收一个JSON对象,我发现很难解析它。这是JSON对象的样子:
{ login: {username: 123, password: 456} }, questions:[{ name: "insomnia", type: "boolean", problem: true, question: "Did you experience insomnia?", answer: null},{ name: "go-to-bed", type: "amount", problem: false, question: "When did you go to bed?", answer: null }]}我想把它解析成3个不同的变量$username、$password和$q
从这个例子中,这是我期望的结果:
echo $username // **output:** 123
echo $password // **output:** 456
echo $q //**output:** questions:[{ name: "insomnia", type: "boolean", problem: true, question: "Did you experience insomnia?", answer: null},{ name: "go-to-bed", type: "amount", problem: false, question: "When did you go to bed?", answer: null }]
发布于 2017-08-11 05:44:21
首先,您的示例不是有效的json。下面是有效的一条:
[{
"login": {
"username": 123,
"password": 456
},
"questions": [{
"name": "insomnia",
"type": "boolean",
"problem": true,
"question": "Did you experience insomnia?",
"answer": null
}, {
"name": "go-to-bed",
"type": "amount",
"problem": false,
"question": "When did you go to bed?",
"answer": null
}]
}]接下来,您可以从字符串中使用json_decode:
$x = '[{
"login": {
"username": 123,
"password": 456
},
"questions": [{
"name": "insomnia",
"type": "boolean",
"problem": true,
"question": "Did you experience insomnia?",
"answer": null
}, {
"name": "go-to-bed",
"type": "amount",
"problem": false,
"question": "When did you go to bed?",
"answer": null
}]
}]';
$q = json_decode($x);
print_r($q);
echo $q[0]->login->username;发布于 2017-08-11 06:16:48
示例中的JSON是无效的,我修复了它并进行了测试,我认为这就是您要找的。
<?php
$json = <<<JSON
{
"login": {
"username": 123,
"password": 456
},
"questions": [
{
"name": "insomnia",
"type": "boolean",
"problem": true,
"question": "Did you experience insomnia?",
"answer": null
},
{
"name": "go-to-bed",
"type": "amount",
"problem": false,
"question": "When did you go to bed?",
"answer": null
}
]
}
JSON;
$decoded = json_decode($json);
$username = $decoded->login->username;
$password = $decoded->login->password;
// Re-encode questions to a JSON string
$q = json_encode($decoded->questions);
echo $username."\n";
echo $password."\n";
echo $q."\n"; https://stackoverflow.com/questions/45623693
复制相似问题