解析没有键的多维 JSON 数组

Posted

技术标签:

【中文标题】解析没有键的多维 JSON 数组【英文标题】:Parse multidimensional JSON array without key 【发布时间】:2020-01-17 03:18:03 【问题描述】:

我试图在网页上显示不同的省份,包括他们的商店,它们位于多维数组中,但我无法显示缺少键的嵌套数组。

我试过给数组一个键,试过“parse.Land.0”、“parse.Land.i”和“parse.Land[0]”来获取信息,但似乎都不起作用.在“parse.Land[0]”的情况下,它将返回国家名称的第一个字母,而不是嵌套数组中的第一个结果。我们还尝试了几种不同的方式来构造数组,但都没有奏效。

从数据库中获取信息的 php 代码:

$Land = ['Land' => $_GET['data']];

$Nederland = array("Groningen", "Friesland", "Drenthe", "Overijssel", "Flevoland", "Gelderland", "Utrecht", "Noord-Holland", "Zuid-Holland", "Zeeland", "Noord-Brabant", "Limburg");
$Andere = array("Etc", "Etcetera");
switch ($_GET['data']) 
    case "Nederland":
        $country = $Nederland;
        $fieldID = 5;
        break;
    case "Andere":
        $country = $Andere;
        $fieldID = 18;
        break; 

    foreach($country as $data) 
        $locationData = [];
        $getProvince= $_db->prepare("SELECT user_id, value FROM wp_bp_xprofile_data WHERE field_id = ".$fieldID." AND value = '".$data."'");
        $getProvince->execute();

        $displayProvince = $getProvince->fetchAll(PDO::FETCH_ASSOC);
        foreach($displayProvince as $dataProvince) 
           $getName= $_db->prepare("SELECT value FROM wp_bp_xprofile_data WHERE field_id = 1 AND user_id = ".$dataProvince['user_id']);
           $getName->execute();
           $displayName = $getName->fetchAll(PDO::FETCH_ASSOC);
           foreach($displayName as $dataName) 
               $locationData[] = ['Info' => $dataName['value']];
           
        
        $Land[] = [$data => $locationData];
    

echo json_encode($Land);

此 JSON 数组的 PHP 代码结果:

"Land":"Nederland","0":"Groningen":["Info":"","Info":""],"1":"Friesland":[],"2":"Drenthe":[],"3":"Overijssel":[],"4":"Flevoland":[],"5":"Gelderland":[],"6":"Utrecht":[],"7":"Noord-Holland":["Info":"Placeholder","Info":"Test","Info":"Anna Paulowna","Info":"Den Helder"],"8":"Zuid-Holland":["Info":"zuidholland","Info":"zuidholland2"],"9":"Zeeland":["Info":"Middelburg"],"10":"Noord-Brabant":[],"11":"Limburg":[]

Ajax 在网页上显示信息:

function getData(land) 
        $.ajax(
            type: 'GET',
            url: '/GetData.php',
            data: data: land,
            success: function (data) 

                var parse = JSON.parse(data);
                var object = Object.keys(parse).length;
                var element = document.getElementById('content');
                for (var i = 0; i < object; i++) 
                    var mainDiv = document.createElement('div');
                    mainDiv.setAttribute('class', 'accordion_holder');
                    element.appendChild(mainDiv);
                    var accordion = document.createElement('button');
                    accordion.setAttribute('class', 'accordion');
                    mainDiv.appendChild(accordion);
                    var icon = document.createElement('i');
                    icon.setAttribute('class', 'fas fa-angle-right');
                    accordion.appendChild(icon);
                    accordion.insertAdjacenthtml('afterbegin', parse.Land);
                
                console.log(parse);
            
        );

    var element = document.getElementById(land);

    element.classList.add('active');

    

我希望能够使用键“Info”获取内部数组的值。 相反,我要么收到一条错误消息,指出 getData() 未定义,要么只是该国家/地区的第一个字母。我希望能够按照“parse.Land.7.Noord-Holland.Info”的方式做一些事情,并返回值“Placeholder”。

任何帮助将不胜感激。

【问题讨论】:

你试过了吗parse[0]看起来像它 返回 [object Object],它确实包含我想要的值。但我不知道如何找回它们。如何让它只显示省份? parse[0] 将计算为 "Groningen":["Info":"","Info":""],当您打印时,它将是 [object Object],如果您需要第一个元素,那么 Object.keys(parse[0])[0] 应该给您格罗宁根 【参考方案1】:

parse[0] 将计算为

"格罗宁根":["信息":"","信息":""]

当你打印它时,它将是[object Object],如果你需要第一个元素,那么

Object.keys(parse[0])[0]

应该给你格罗宁根

【讨论】:

【参考方案2】:

在您的情况下,您可以使用以下内容:

Object.keys(parse[i])[0])

循环遍历所有结果。

【讨论】:

以上是关于解析没有键的多维 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

jQuery解析JSON多维数组

用 Java 解析 JSON 多维数组

如何解析具有相同键的不同数据类型的改造对象的json数组

php解析json数组

快速解析动态键的json响应问题

使用 Dart 语言解析嵌套 JSON 数组并将其放入模型类中