PHP利用数组构造JSON

问题起因

以往都是直接用构造数组的形式构造json

例子

$arr = array("A"=>"1","B"=>"2");
$arr = json_encode($arr);
print_r($arr);

得到输出

{"A":"1","B":"2","C":"3"}

然而此时要构造这样的json:

{
    "table": [
        {
            "id": "0",
            "flow": [
                {
                    "id": "0",
                    "match": {
                        "in-port": "1",
                        "vlan-match": {
                            "vlan-id": {
                                "vlan-id-present": "true",
                                "vlan-id": "20"
                            }
                        }
                    },
                    "instructions": {
                        "instruction": [
                            {
                                "apply-actions": {
                                    "action": [
                                        {
                                            "output-action": {
                                                "output-node-connector": "3",
                                                "max-length": "65535"
                                            },
                                            "order": "1"
                                        },
                                        {
                                            "pop-vlan-action": {},
                                            "order": "0"
                                        }
                                    ]
                                },
                                "order": "0"
                            }
                        ]
                    },
                    "buffer_id": "65535",
                    "installHw": "true",
                    "barrier": "true",
                    "strict": "true",
                    "priority": "160",
                    "idle-timeout": "0",
                    "hard-timeout": "0",
                    "table_id": "0"
                }
            ]
        }
    ]
}

对于[] ,以及空的{}的如果构造是一个难题。

问题解决

访问到了一篇文章 php构造json的方法,并补充了构造空{}的方案

构造空{}方案如下

$arr = array("A"=>"1","B"=>"2","C"=>"3","D"=> new stdClass());
$arr = json_encode($arr);
print_r($arr);

结果

{"A":"1","B":"2","C":"3","D":{}}

综合上述方案,构造上述方案,并得到解决

$post_data = array();
$post_data["table"][0]['id'] = "0";
$post_data["table"][0]['flow'][0]["id"] = "0";
$post_data['table'][0]['flow'][0]["match"]["in-port"] = "1";
$post_data['table'][0]['flow'][0]['match']['vlan-match']['vlan-id']['vlan-id-present'] = "true";
$post_data['table'][0]['flow'][0]['match']['vlan-match']['vlan-id']['vlan-id'] = "20";
$post_data['table'][0]['flow'][0]['instructions']['instruction'][0]['apply-actions']['action'][0]['output-action']['output-node-connector'] = "3";
$post_data['table'][0]['flow'][0]['instructions']['instruction'][0]['apply-actions']['action'][0]['output-action']['max-length'] = "65535";
$post_data['table'][0]['flow'][0]['instructions']['instruction'][0]['apply-actions']['action'][0]['order'] = "1";
$post_data['table'][0]['flow'][0]['instructions']['instruction'][0]['apply-actions']['action'][1]['pop-vlan-action'] = new stdClass();
$post_data['table'][0]['flow'][0]['instructions']['instruction'][0]['apply-actions']['action'][1]['order'] = "0";
$post_data['table'][0]['flow'][0]['instructions']['instruction'][0]['order'] = "0";
$post_data['table'][0]['flow'][0]['buffer_id'] = "65535";
$post_data['table'][0]['flow'][0]['installHw'] = "true";
$post_data['table'][0]['flow'][0]['barrier'] = "true";
$post_data['table'][0]['flow'][0]['strict'] = "true";
$post_data['table'][0]['flow'][0]['priority'] = "160";
$post_data['table'][0]['flow'][0]['idle-timeout'] = "0";
$post_data['table'][0]['flow'][0]['hard-timeout'] = "0";
$post_data['table'][0]['flow'][0]['table_id'] = "0";


$post_data = json_encode($post_data);
echo $post_data;
posted @ 2017-01-16 14:02  考拉小无  阅读(418)  评论(0编辑  收藏  举报