【问题标题】:How to read a complex and nested json data如何读取复杂且嵌套的 json 数据
【发布时间】:2016-07-18 07:11:28
【问题描述】:

我的问题是,您如何使用 javascript 读取特定形式的 json 数据,例如,如果我有这个,在我看来这是一个很难的赌注,所以您能帮帮我吗。

{
  "jQRReponse": [
    [
      {
        "sujet": "RHONE ALPES",
        "verbe": "est_le_nom_de_la_region",
        "complement": {
          "sujet": "82",
          "verbe": "est_la_region_du_dept",
          "complement": {
            "sujet": "01",
            "verbe": "est_le_numero_du_dept",
            "complement": {
              "sujet": "Ain",
              "verbe": "contient_les_resultats_de_depAnn",
              "complement": {
                "sujet": "Ain2014",
                "verbe": "Pop_results_Ens_Total",
                "complement": "626794"
              }
            }
          }
        }
      }
    ],
    [
      {
        "sujet": "RHONE-ALPES",
        "verbe": "est_le_nom_de_la_region",
        "complement": {
          "sujet": "82",
          "verbe": "est_la_region_du_dept",
          "complement": {
            "sujet": "01",
            "verbe": "est_le_numero_du_dept",
            "complement": {
              "sujet": "Ain",
              "verbe": "contient_les_resultats_de_depAnn",
              "complement": {
                "sujet": "Ain2014",
                "verbe": "Pop_results_Ens_Total",
                "complement": "626794"
              }
            }
          }
        }
      }
    ]
  ]
}

如果我有这个表格,请说:

data : [{
toto:5,
mama:10
},
{
toto:99,
mama:10
},
{
toto:88,
mama:10
}]

我将在我喜欢的索引处读取 toto 值: data[i].toto.

那么我该怎么做第一个呢。

谢谢

【问题讨论】:

  • 你要读取哪个键值?
  • 其实我希望能够读取我以后可以使用的所有值
  • @YahyaAlami 首先将 javascript 中的数据解析为 json 对象,您可以在 jsoneditoronline.org 此处可视化您的数据,然后使用 obj.jQRReponse[1].sujet 等,只是一个提示
  • 谢谢@ARUN 我会试试这个

标签: javascript json


【解决方案1】:

您可以遍历所有数据并获得结果。

访问的形式类似于

data.jQRReponse[0][0].complement.complement.sujet
// returns "01"

function read(o) {
    Object.keys(o).forEach(function (k) {
        if (o[k] !== null && typeof o[k] === 'object') {
            console.log(k + ' -->');
            read(o[k]);
            return;
        }
        console.log(k + ': ' + o[k]);
    });
}

var data = { "jQRReponse": [[{ "sujet": "RHONE ALPES", "verbe": "est_le_nom_de_la_region", "complement": { "sujet": "82", "verbe": "est_la_region_du_dept", "complement": { "sujet": "01", "verbe": "est_le_numero_du_dept", "complement": { "sujet": "Ain", "verbe": "contient_les_resultats_de_depAnn", "complement": { "sujet": "Ain2014", "verbe": "Pop_results_Ens_Total", "complement": "626794" } } } } }], [{ "sujet": "RHONE-ALPES", "verbe": "est_le_nom_de_la_region", "complement": { "sujet": "82", "verbe": "est_la_region_du_dept", "complement": { "sujet": "01", "verbe": "est_le_numero_du_dept", "complement": { "sujet": "Ain", "verbe": "contient_les_resultats_de_depAnn", "complement": { "sujet": "Ain2014", "verbe": "Pop_results_Ens_Total", "complement": "626794" } } } } }]] };

read(data, []);

【讨论】:

    【解决方案2】:

    如果你知道元素、深度和键,你可以访问这个嵌套 json 对象的特定部分。

    如果你的元素是0,深度是2,key是verbe,那么你可以这样做:

    nestedObj[0].complement.complement.complement.verbe
    

    如果您的要求是遍历整个对象并找到您需要的东西,您可以对每个元素使用递归函数。

    function traverse_it(obj){
    
        for(var prop in obj){
    
            console.log(obj[prop]);            //Or whatever you want to do with this level
    
            if(typeof obj[prop]=='object'){
               traverse_it(obj[prop[i]]);      //Function goes to the next level here
    
            }
        }
    }
    
    traverse_it(nestedObj);
    

    Here 很有见地

    【讨论】:

    • 不,这是不正确的,它实际上必须是这样的 nestedObj[i][0],但我感谢你的回答
    • 我的回答只考虑了 obj 部分。不是包含大量它的数组。
    • 哦,好吧!在这种情况下,我没有问题,谢谢
    猜你喜欢
    • 2019-10-22
    • 2021-09-28
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2021-04-11
    • 2021-11-27
    相关资源
    最近更新 更多