我有来自另一个系统的json,如何存储在oracle数据库中?我不介意使用 while 或 for 或什么,我只希望可以在数据库中存储 4 行,没有空行作为另一个系统提供的空行。我已经参考了很多问题,但没有找到像我这样的类似案例数据。
这就是 json 示例
{
"ErrorCode": "00",
"ErrorMessage": "",
"ServiceList": {
"ServiceDetail": [
{
"Service_name": [
"LTE_DATA_PRI_1",
"LTE_ONM_PRI_2"
],
"AVLAN": [
"LTE_DATA_PRI_SITE_1",
"LTE_DATA_PRI_SITE_2"
],
"IpAddress": [
"192.168.1/20",
"192.168.2/20"
],
"AggPort": [
"GigabitEthernet 1/1/10.1000",
"GigabitEthernet 1/1/10.1001"
]
},
"\r\n",
"\r\n",
{
"Service_name": [
"LTE_DATA_SEC_1",
"LTE_ONM_SEC_2"
],
"AVLAN": [
"LTE_DATA_SEC_SITE_1",
"LTE_DATA_SEC_SITE_2"
],
"IpAddress": [
"192.168.3/20",
"192.168.4/20"
],
"AggPort": [
"GigabitEthernet 1/1/10.1003",
"GigabitEthernet 1/1/10.1004"
]
},
"\r\n",
"\r\n"
]
}
}
预期显示或存储在数据库中
下面是我在 php 文件中的代码,但它只保存主要的
$i = 0;
$x = 0;
$arrayLength = count($array['ServiceList']['ServiceDetail']);
while ($x < $arrayLength)
{
$arrayLength2 = count($array['ServiceList']['ServiceDetail'][$x]['AVLAN']);
while ($i < $arrayLength2)
{
$AVLAN1 = $array['ServiceList']['ServiceDetail'][$x]['AVLAN'];
if ( $AVLAN1 !== null){
$p_avlan = $array['ServiceList']['ServiceDetail'][$x]['AVLAN'][$i];
$p_agg_port = $array['ServiceList']['ServiceDetail'][$x]['AggPort'][$i];
$p_ip_address = $array['ServiceList']['ServiceDetail'][$x]['IpAddress'][$i];
$p_service_name = $array['ServiceList']['ServiceDetail'][$x]['Service_name'][$i];
// sql procedure here //
$i++;
}
} // while 2
$x++;
} // while 1
使用 foreach 而不是 while 循环可以让您不必计算条目数并保持自己的循环索引。
在内层,循环遍历
Service_name
条目,然后使用该循环的键来访问同一层上其他数组中的相应元素。
foreach($array['ServiceList']['ServiceDetail'] as $serviceDetail) {
if(is_array($serviceDetail)) {
foreach($serviceDetail['Service_name'] as $key => $p_service_name) {
$p_avlan = $serviceDetail['AVLAN'][$key];
$p_ip_address = $serviceDetail['IpAddress'][$key];
$p_agg_port = $serviceDetail['AggPort'][$key];
var_dump($p_service_name, $p_avlan, $p_ip_address, $p_agg_port);
}
}
}