【问题标题】:JSON - reading nested data from a json file?JSON - 从 json 文件中读取嵌套数据?
【发布时间】:2013-05-31 06:55:40
【问题描述】:

这是我的 JSON 数据:

{
    "main": [
        {
            "main_id": "1234",
            "main_sub": [
                {
                    "main_info": {
                        "main_1" : "A",
                        "main_2" : "B",
                        "main_3" : "C"
                    },
                    "main_4" : "D",
                    "main_5" : "E",
                },
                {
                    "main_6" : "F",
                    "main_7" : "G",
                    "main_info": {
                        "main_1" : "H",
                        "main_2" : "I",
                        "main_3" : "J"
                    },
                    "main_4" : "D",
                    "main_5" : "E",  
                    "main_act": [
                        {
                            "main_act_1": 12,
                            "main_act_1_1": "C",
                            "main_act_1_2": "T"
                        },
                        {
                            "main_act_1": 12,
                            "main_act_1_1": "D",
                            "main_act_1_2": "T"
                        }
                    ],
                    "main_8" : "R"
                },
                {
                    "main_4" : "D",
                    "main_5" : "E",
                    "main_10": "P"
                }
            ],
            "main_score": 0.1
        },
        {
           "main_id": "1334",
            "main_sub": [
                {
                    "main_info": {
                        "main_1" : "B",
                        "main_2" : "Q",
                        "main_3" : "C",
                        "main_11": "D"
                    },
                    "main_4" : "S",
                    "main_5" : "E",
                    "main_6" : "G",
                    "main_7" : "T"
                },
                {
                    "main_6" : "F",
                    "main_7" : "G",
                    "main_info": {
                        "main_1" : "A",
                        "main_2" : "I",
                        "main_3" : "J"
                    },
                    "main_10": "W",
                    "main_4" : "D",
                    "main_5" : "E",  
                    "main_act": [
                        {
                            "main_act_1": 112,
                            "main_act_1_1": "C",
                            "main_act_1_2": "T"
                        },
                        {
                            "main_act_1": 123,
                            "main_act_1_1": "D",
                            "main_act_1_2": "T"
                        }
                    ],
                    "main_8" : "R"
                },
                {
                    "main_4" : "D",
                    "main_5" : "E",
                    "main_10": "P"
                }
            ],
            "main_score": 0.1
        }
    ],
    "main_count": 2
}

即使在 jQuery 中使用 $.each 后,由于嵌套,我也无法读取大部分数据。

还有一种方法可以读取此 json 数据的每一行并将其打印在屏幕上,而无需在我的 jQuery 代码中实际提及“main_1”之类的字段名称?

预期输出:

我只想为 main 的两个实例打印字段名称及其值。

有点像:

main_id - 1234
main_sub -
  main_info - 
    main_1 - A
    main_2 - B

等等........(对于 main 的两个实例 - 因此 main_count = 2 在 json 数据的末尾)

【问题讨论】:

  • 你不需要$.each来解析这个json。
  • @mithunsatheesh 好吧,还有其他方法可以让我读取整个数据吗?
  • 如果您能告诉我们您期望的输出是什么会更好。随着你的尝试。
  • 如果你有一个递归数据结构,你可能需要一个递归算法,或者至少需要一堆上下文。
  • @JanDvorak:很抱歉,我不明白一堆上下文是什么意思?你能举个例子吗?

标签: jquery arrays json


【解决方案1】:

纯 JS 解决方案。这将在控制台中列出整个对象。

var myVar = {..(your object data here)..};

function listing(obj, prefix){
    for(var key in obj){
        var el = obj[key];

        if(el instanceof Object){
            listing(el, prefix + ' | ' + key);
        }
        else{
            console.log(prefix + ' | ' + key + ': ' + el);
            //document.write(prefix + ' | ' + key + ': ' + el + '<br />'); //alternatively writing to document
        }
    }
}

listing(myVar, '');



预期输出:

 | main | 0 | main_id: 1234
 | main | 0 | main_sub | 0 | main_info | main_1: A
 | main | 0 | main_sub | 0 | main_info | main_2: B
 | main | 0 | main_sub | 0 | main_info | main_3: C
 | main | 0 | main_sub | 0 | main_4: D
 | main | 0 | main_sub | 0 | main_5: E
 | main | 0 | main_sub | 1 | main_6: F
 | main | 0 | main_sub | 1 | main_7: G

等等..

【讨论】:

  • 我试过这个,但它似乎不起作用,当我将 console.log 更改为在正文的屏幕上打印时没有显示数据
  • 如果您想将其写入文档,请使用document.write(prefix + ' | ' + key + ': ' + el + '&lt;br /&gt;');。您确定您的数据已经解析为对象吗?这可能是字符串。
【解决方案2】:

这段代码可能对你有帮助

       success: function(data)
           {
               if(data)
                   {

                        var json = $.parseJSON(data);
                        $(json).each(function(i,val)
                        {
                            //your code  
                            $(val).each(function(index,val)
                             {
                                    //your code
                             });



                       });
                 }
          }

【讨论】:

  • 我熟悉这种从文件中提取 json 数据的结构,但我面临的问题是进入 $.each 嵌套函数的代码,以便我可以遍历整个数据?
  • 你知道递归函数。试试看。
【解决方案3】:

如果这个 json 是请求的结果,tel jQuery 它应该期望 json 作为答案,并将结果用作纯 javascript 对象:

$.ajax({
    url: 'my/url',
    dataType: 'json',
    success: function(data) { // 'data' will be an object, not a string
        data.main[0].main_sub[1].main_6; //should be "F"
    }
});

如果你的 json 数据存储在字符串中,请使用jQuery.parseJSON 将其转为对象:

var data = jQuery.parseJSON(jsonString);
data.main[0].main_sub[1].main_6; //should be "F"

【讨论】:

  • 但是通过这种格式,我不是需要对每一行数据进行硬编码才能在屏幕上打印吗?
  • data.main[0].main_sub[1].main_6;这不起作用,当我提醒它时,它说它是未定义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多