【问题标题】:php json array of arrays and get some key values from deep nested [duplicate]php json数组数组并从深层嵌套中获取一些键值[重复]
【发布时间】:2021-11-02 08:46:42
【问题描述】:

我有一个从 API 获取的 JSON 数据,我想获取/访问每个 AttributeValues codevalues 以存储到表中,代码作为表列和值对于每条记录都是动态的。我不需要存储 json 值中的 AttachementsTotal。 我想存储到表中作为插入(ID、TrackingNumber、CustomerFull)值(json 值)。任何 codeigniter,或 php 解决方案或提示都将非常适用。

 {
    "Values": [{
            "AttributeValues": [{
                    "ID": 0,
                    "Name": "ID",
                    "Values": [
                        "720"
                    ],
                    "DataType": "Number",
                    "Code": "ID",
                    "IsVisible": true,
                    "IsValueEmptyOrNull": false,
                    "IsDefault": true
                },
                {
                    "ID": 0,
                    "Name": "Tracking Number",
                    "Values": [
                        "xxxx/1094/180730/1"
                    ],
                    "DataType": "String",
                    "Code": "TrackingNumber",
                    "IsVisible": true,
                    "IsValueEmptyOrNull": false,
                    "IsDefault": true
                },
                {
                    "ID": 0,
                    "Name": "Customer Full",
                    "Values": [
                        "Ali Abdi"
                    ],
                    "DataType": "String",
                    "Code": "CustomerFull",
                    "IsVisible": true,
                    "IsValueEmptyOrNull": false,
                    "IsDefault": true
                }

            ],
            "Attachements": null
        },
        {
            "AttributeValues": [{
                    "ID": 0,
                    "Name": "ID",
                    "Values": [
                        "757"
                    ],
                    "DataType": "Number",
                    "Code": "ID",
                    "IsVisible": true,
                    "IsValueEmptyOrNull": false,
                    "IsDefault": true
                },
                {
                    "ID": 0,
                    "Name": "Tracking Number",
                    "Values": [
                        "xxx/1094/180731/1"
                    ],
                    "DataType": "String",
                    "Code": "TrackingNumber",
                    "IsVisible": true,
                    "IsValueEmptyOrNull": false,
                    "IsDefault": true
                },
                {
                    "ID": 0,
                    "Name": "Customer Full",
                    "Values": [
                        "Aberash Haile"
                    ],
                    "DataType": "String",
                    "Code": "CustomerFull",
                    "IsVisible": true,
                    "IsValueEmptyOrNull": false,
                    "IsDefault": true
                },
                {
                    "ID": 0,
                    "Name": "Service Code",
                    "Values": [
                        "SO-1096"
                    ],
                    "DataType": "String",
                    "Code": "ServiceCode",
                    "IsVisible": true,
                    "IsValueEmptyOrNull": false,
                    "IsDefault": true
                },
                {
                    "ID": 0,
                    "Name": "Request Date",
                    "Values": [
                        "7/31/2018 11:04:06 AM"
                    ],
                    "DataType": "Datetime",
                    "Code": "RequestDate",
                    "IsVisible": true,
                    "IsValueEmptyOrNull": false,
                    "IsDefault": true
                }
            ],
            "Attachements": null
        }
    ],
    "Total": 335
}

【问题讨论】:

    标签: php mysql codeigniter codeigniter-3


    【解决方案1】:

    首先,您应该将 JSON 转换为数组,然后使用 loop(foreach, for, while...) 并相应地获取值,如下所示:

    <?php 
    
     $json = '{
      "Values":[
        {
            "AttributeValues":[
                {
                "ID":0,
                "Name":"ID",
                "Values":[
                    "720"
                ],
                "DataType":"Number",
                "Code":"ID",
                "IsVisible":true,
                "IsValueEmptyOrNull":false,
                "IsDefault":true
                },
                {
                "ID":0,
                "Name":"Tracking Number",
                "Values":[
                    "xxxx/1094/180730/1"
                ],
                "DataType":"String",
                "Code":"TrackingNumber",
                "IsVisible":true,
                "IsValueEmptyOrNull":false,
                "IsDefault":true
                },
                {
                "ID":0,
                "Name":"Customer Full",
                "Values":[
                    "Ali Abdi"
                ],
                "DataType":"String",
                "Code":"CustomerFull",
                "IsVisible":true,
                "IsValueEmptyOrNull":false,
                "IsDefault":true
                }
            ],
            "Attachements":null
        },
        {
            "AttributeValues":[
                {
                "ID":0,
                "Name":"ID",
                "Values":[
                    "757"
                ],
                "DataType":"Number",
                "Code":"ID",
                "IsVisible":true,
                "IsValueEmptyOrNull":false,
                "IsDefault":true
                },
                {
                "ID":0,
                "Name":"Tracking Number",
                "Values":[
                    "xxx/1094/180731/1"
                ],
                "DataType":"String",
                "Code":"TrackingNumber",
                "IsVisible":true,
                "IsValueEmptyOrNull":false,
                "IsDefault":true
                },
                {
                "ID":0,
                "Name":"Customer Full",
                "Values":[
                    "Aberash Haile"
                ],
                "DataType":"String",
                "Code":"CustomerFull",
                "IsVisible":true,
                "IsValueEmptyOrNull":false,
                "IsDefault":true
                },
                {
                "ID":0,
                "Name":"Service Code",
                "Values":[
                    "SO-1096"
                ],
                "DataType":"String",
                "Code":"ServiceCode",
                "IsVisible":true,
                "IsValueEmptyOrNull":false,
                "IsDefault":true
                },
                {
                "ID":0,
                "Name":"Request Date",
                "Values":[
                    "7/31/2018 11:04:06 AM"
                ],
                "DataType":"Datetime",
                "Code":"RequestDate",
                "IsVisible":true,
                "IsValueEmptyOrNull":false,
                "IsDefault":true
                }
            ],
            "Attachements":null
        }
    ],
    "Total":335
    }';
    
    $json_data = json_decode($json, true);
    //echo "<pre>"; print_r($json_data['Values']); exit;
    if(isset($json_data['Values'])){
        foreach($json_data as $data){
            foreach($data as $attr){
                if(isset($attr['AttributeValues'])){
                    foreach($attr['AttributeValues'] as $value){
                        if(isset($value['Values'])){
                            foreach($value['Values'] as $val){
                                $attribute_values = $val;
                                echo "<pre>"; print_r($attribute_values); echo "</pre>";
                            }
                        } 
                    }
                }
            }
        }
    }
    ?>
    

    【讨论】:

    • 非常感谢 Rajeev 的快速重播,或多或少地满足了我的全部需求,但是,我对输出的改动很小,因为我想将它存储到数据库中,我希望看到如下输出720, xxxx/1094/180730/1, Ali Abdi 757, xxx/1094/180731/1, Aberash Haile, SO-1096, 2018 年 7 月 31 日上午 11:04:06
    • 现在,您可以在此处访问完整数据,因此请选择您要存储的值并在插入查询中进行设置。
    • 是的,我可以访问它,但请给我一个提示,将其更改为插入值()。谢谢你的时间
    • 回声 "
      "; print_r($attribute_values);回声“
      ”;那个地方你可以把你的插入查询
    • echo "
      " 的输出; print_r($attribute_values);回声“
      ”;是单个单元格值[一列] 不是表格的每一列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2016-06-12
    • 1970-01-01
    • 2022-01-22
    • 2016-06-06
    • 1970-01-01
    相关资源
    最近更新 更多