Php 有条件地格式化JSON
我正在尝试学习PHP,并且正在尝试生成一些JSON 这是我想要的格式Php 有条件地格式化JSON,php,arrays,json,Php,Arrays,Json,我正在尝试学习PHP,并且正在尝试生成一些JSON 这是我想要的格式 { "Data": "Message was sent on 12-31-1999 12:00:00 am", "Sandbox": { "Sandboxed": true }, "Errors": [{ "Code": 5, "Message": "Message bounced back" }] } 我可以这样做: $message
{
"Data": "Message was sent on 12-31-1999 12:00:00 am",
"Sandbox": {
"Sandboxed": true
},
"Errors": [{
"Code": 5,
"Message": "Message bounced back"
}]
}
我可以这样做:
$message = "Message was sent on 12-31-1999 12:00:00 am";
$errorMsg = "Message bounced back";
$sandboxkey = array( "Sandboxed" => true );
$error = array( "Code" => 5, "Message" => $errorMsg );
$package = array(
"Data" => $message,
"Sandbox" => $sandboxkey,
"Errors" => $error
);
return json_encode($package, JSON_FORCE_OBJECT | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
但是如果设置了布尔值,我只想添加“Sandbox”键/值
$isSandbox = true;
$message = "Message was sent on 12-31-1999 12:00:00 am";
$errorMsg = "Message bounced back";
$error = array( "Code" => 5, "Message" => $errorMsg );
$package = array(
"Data" => $message,
"Errors" => $error
);
if ($isSandbox) {
$sandboxkey = array( "Sandboxed" => true );
array_push($package, $sandboxkey);
}
$error = array( "Code" => 5, "Message" => $errorMsg );
return json_encode($package, JSON_FORCE_OBJECT | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
但这会添加一个“0”,然后添加KVP
{
"Data": "Message was sent on 12-31-1999 12:00:00 am",
"Errors": {
"Code": 5,
"Message": "Message bounced back"
},
"0": {
"Sandboxed": true
}
}
此外,我希望将错误列在如下数组中:
"Errors": [{
"Code": 5,
"Message": "Message bounced back"
},
{
"Code": 4,
"Message": "Message is old"
} ]
{
"Data": "Message was sent on 12-31-1999 12:00:00 am",
"Errors": [
{
"Code": 5,
"Message": "Message bounced back"
}
],
"Sandboxed": true
}
我尝试了数组推送和JSON_FORCE_对象的多种组合,但我似乎无法完全按照我的意愿获得它。有人能帮忙吗?
但这会添加一个“0”,然后添加KVP
{
"Data": "Message was sent on 12-31-1999 12:00:00 am",
"Errors": {
"Code": 5,
"Message": "Message bounced back"
},
"0": {
"Sandboxed": true
}
}
如果数组是数字数组(即键是整数-例如0=>'cat',1=>'dog'
),则可以使用。但在这种情况下,数组是关联数组。设置所需键沙盒的一种方法是通过在括号符号中指定来设置数组键:
if ($isSandbox) {
$sandboxkey = array( "Sandboxed" => true );
$package['Sandbox'] = $sandboxkey;
}
这是必需的,因为数组的其他键不是
请参见中的演示
否则可以使用:
if ($isSandbox) {
$sandboxArray = array(
'Sandbox' => array( "Sandboxed" => true )
);
$package = array_merge($package, $sandboxArray);
}
看到一个演示
有关数字数组与关联数组的更多信息,请参阅。令人惊讶的是,在列表中没有明确说明这一差异
此外,我希望在数组中列出错误
为此,在另一个数组中嵌套$error
(关联数组,将转换为JSON对象)
$package = array(
"Data" => $message,
"Sandbox" => $sandboxkey,
"Errors" => array($error)
);
但这会添加一个“0”,然后添加KVP
{
"Data": "Message was sent on 12-31-1999 12:00:00 am",
"Errors": {
"Code": 5,
"Message": "Message bounced back"
},
"0": {
"Sandboxed": true
}
}
如果数组是数字数组(即键是整数-例如0=>'cat',1=>'dog'
),则可以使用。但在这种情况下,数组是关联数组。设置所需键沙盒的一种方法是通过在括号符号中指定来设置数组键:
if ($isSandbox) {
$sandboxkey = array( "Sandboxed" => true );
$package['Sandbox'] = $sandboxkey;
}
这是必需的,因为数组的其他键不是
请参见中的演示
否则可以使用:
if ($isSandbox) {
$sandboxArray = array(
'Sandbox' => array( "Sandboxed" => true )
);
$package = array_merge($package, $sandboxArray);
}
看到一个演示
有关数字数组与关联数组的更多信息,请参阅。令人惊讶的是,在列表中没有明确说明这一差异
此外,我希望在数组中列出错误
为此,在另一个数组中嵌套$error
(关联数组,将转换为JSON对象)
$package = array(
"Data" => $message,
"Sandbox" => $sandboxkey,
"Errors" => array($error)
);
您必须在代码中做一些更改,这将帮助您实现预期的输出 1.使用
array\u merge
而不是array\u push
2.设置Errors
如下键“Errors”=>数组($error)
而不是“Errors”=>$error
您必须在代码中做一些更改,这将帮助您实现预期的输出 1.使用
array\u merge
而不是array\u push
2.设置Errors
如下键“Errors”=>数组($error)
而不是“Errors”=>$error
如何处理json:
是json格式的数组[]
是json中的对象{}
{'data':[{'depperdata':2}]}
do
$a = new stdClass();
$a->data = array();
$b = new stdClass();
$b->deeperdata=2;
$a->data[0]=$b;
print_r(json_encode($a,JSON_PRETTY_PRINT));
或
json\u解码什么
- 如果您有一个assoc数组,它将成为一个json_对象
- 如果您有一个索引数组,它将成为一个json_数组
- 如果您有一个对象,它将成为一个json_对象
- 如果您使用的是混合的assoc/索引数组,则会像您的示例一样出现断开的json。属性名
!(防止这种情况!)0
是json格式的数组[]
是json中的对象{}
{'data':[{'depperdata':2}]}
do
$a = new stdClass();
$a->data = array();
$b = new stdClass();
$b->deeperdata=2;
$a->data[0]=$b;
print_r(json_encode($a,JSON_PRETTY_PRINT));
或
json\u解码什么
- 如果您有一个assoc数组,它将成为一个json_对象
- 如果您有一个索引数组,它将成为一个json_数组
- 如果您有一个对象,它将成为一个json_对象
- 如果您使用的是混合的assoc/索引数组,则会像您的示例一样出现断开的json。属性名
!(防止这种情况!)0
祝你有愉快的一天…
JSON\u FORCE\u OBJECT
从数组生成一个对象。index0
成为JSON对象的属性。不要使用它。JSON\u FORCE\u OBJECT
从数组生成一个对象。index0
成为JSON对象的属性。不要使用它。{}
是JS中的对象,因为这是php中的调用,它也是一个关联数组是JS中的对象,因为在php中它也是一个关联数组。感谢您花时间!这非常有效。那么,接下来,为什么要array\u merge
而不是array\u push
?@user-44651array\u merge
合并指定数组中的键
值对这里asarray\u push
在某个索引处推送一个array
或一个变量。感谢您花时间!这非常有效。那么,接下来,为什么array\u merge
而不是array\u push
?@user-44651array\u merge
将键
值对合并到指定的数组中,其中asarray_push
在某个索引处推送一个数组
或一个变量。太棒了!感谢您花时间解释数组_push()
是的NP-我更新了解释,提到了数组_merge()-也许它会很有帮助太棒了!感谢您花时间解释数组_push())
Yeah NP-我更新了解释,提到了array\u merge()-也许会有帮助