【问题标题】:Reading through nested Json files for display on a web page读取嵌套的 Json 文件以显示在网页上
【发布时间】:2017-04-18 02:49:48
【问题描述】:

我有一个存储 Reddit 帖子标题及其总分的 JSON 文件:

{
  "'JavaFX Simple Inventory Management App - Open source'": 39, 
  "'Creating Formula Dependency Maps from Excel Spreadsheets'": 5, 
  "'CVE-2017-5645: Apache Log4j socket receiver deserialization vulnerability'": 11
}

我可以使用以下代码轻松访问这些数据并将其列出到 DOM:

$.getJSON("./data.json", function(json) {
    var list = [];
    /*Adds each key value pair to a `<li> tag`.*/
    $.each(json, function(key, val) {
        list.push("<li id='redditData'>" + key + ": " + val + "</li>");
    });
    /*Appends each data-filled `<li>` tag to a `<ul>` tag.*/
    $("<ul>", {
      "class": "data",
      html: list.join("")
    }).appendTo("#dataContainer");
});

但是,我想存储具有更精确信息的数据,显示大概的赞成/反对比率,如下所示:

{
  "'JavaFX Simple Inventory Management App - Open source'": 
    {"upvotes": 44.0, "downvotes": 7.0}, 

  "'Creating Formula Dependency Maps from Excel Spreadsheets'": 
    {"upvotes": 3.0, "downvotes": 1.0}, 

  "'CVE-2017-5645: Apache Log4j socket receiver deserialization vulnerability'": 
    {"upvotes": 12.0, "downvotes": 1.0}
}

我怎样才能遍历这些数据并正确显示它?

【问题讨论】:

    标签: javascript jquery json


    【解决方案1】:

    现在帖子的标题用作帖子数据对象的对象键。从技术上讲,这意味着如果任何帖子具有相同的名称,则数据将被最后添加的帖子覆盖。

    从长远来看,如果您可以将 JSON 重构得更像:

    {
        "title": "TITLE OF THE POST",
        "upvotes": SOME NUMBER,
        "downvotes": SOME NUMBER
    }
    

    并有一个包含帖子信息的对象数组,其中包含标题、赞成票和反对票(以及您要添加的任何其他内容)的自己的属性。然后,您将遍历数组并获取对象并访问以下属性:

    var json = [
        {
            "title": "Some title",
            "downvotes": 100,
            "upvotes": 50
        },
        {
            "title": "Another title",
            "downvotes": 500,
            "upvotes": 40
        }
    ];
    
    var obj;
    for (var i=0; i<json.length; i++) {
      obj = json[i];
      console.log(obj.title);
      console.log(obj.downvotes);
      console.log(obj.upvotes);
    }
    

    如果出于某种原因,您真的必须按照他们的方式保留它,您可以这样做:

    var title;
    var downvotes;
    var upvotes;
    
    for (var key in json) {
      var title = key;
      var downvotes = json[key].downvotes;
      var upvotes = json[key];
    }
    

    这与将属性名称添加到 $.each 中的 val 基本相同。所以,val.downvotes 和 val.upvotes。

    【讨论】:

    • 标题好点!我认为这会让事情更容易组织起来,但当然,我的想法最终只会让事情变得对我来说很困难,就像往常一样。我已经更新了我的代码,将提交的内容分组为您推荐的格式。然后,我将您的一点 Javascript 合并到我的 jQuery 循环中,一切都变成了金色。我很感激帮助。昨晚我想的不是很清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多