【问题标题】:How to display json data in a div when json data is in array [closed]当json数据在数组中时如何在div中显示json数据[关闭]
【发布时间】:2020-06-17 21:17:30
【问题描述】:

我正在尝试在我的应用页面中显示作为 Ajax 回调接收的数据。数据有点像这样:

"data": [
    {
     "name": "Rehan",
     "location": "Pune",
     "description": "hello hi",
     "created_by": 13692,
     "users_name": "xyz",
    },
    {
      "name": "Sameer",
      "location": "Bangalore",
      "description": "how are you",
      "created_by": 13543,
      "users_name": "abc",
    },

API 包含 100 多个数据,那么我们如何在 html 页面中显示这些数据。像这样:

Name: Rehan
location: Pune
Description: hello hi
created by: 13692
user name: xyz

编辑

或者,如 cmets / Solutions 中所建议,如何将 数据 显示为 HTML 表格?

【问题讨论】:

  • 您需要使用循环并将所需的 HTML 元素附加到 DOM。
  • 如何将 HTML 元素附加到 DOM。其实我是显示json数据的新手
  • 学习一些教程......很多在线教程。请阅读有关如何使用本网站的帮助部分

标签: javascript jquery


【解决方案1】:

您可以使用for 循环遍历数组并构造 HTML 字符串。使用jQuery.append() 将字符串添加到正文中。

var data = [{
    "name": "Rehan",
    "location": "Pune",
    "description": "hello hi",
    "created_by": 13692,
    "users_name": "xyz",
  },
  {
    "name": "Sameer",
    "location": "Bangalore",
    "description": "how are you",
    "created_by": 13543,
    "users_name": "abc",
  },
]

var htmlText = '';
for (var key in data) {
  htmlText += '<div class="div-conatiner">';
  htmlText += '<p class="p-name"> Name: ' + data[key].name + '</p>';
  htmlText += '<p class="p-loc"> Location: ' + data[key].location + '</p>';
  htmlText += '<p class="p-desc"> Description: ' + data[key].description + '</p>';
  htmlText += '<p class="p-created"> Created by: ' + data[key].created_by + '</p>';
  htmlText += '<p class="p-uname"> Username: ' + data[key].users_name + '</p>';
  htmlText += '</div>';
}

$('body').append(htmlText);
.div-conatiner {
  background-color: #eeeeee;
  margin-bottom: 5px;
  padding: 5px;
}

.div-conatiner p {
  margin : 0px;
}
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

更新:另一种选择是使用 map 循环遍历数组并使用 Template literals 构造 HTML

var data = [{
    "name": "Rehan",
    "location": "Pune",
    "description": "hello hi",
    "created_by": 13692,
    "users_name": "xyz",
  },
  {
    "name": "Sameer",
    "location": "Bangalore",
    "description": "how are you",
    "created_by": 13543,
    "users_name": "abc",
  },
]

var htmlText = data.map(function(o){
  return `
      <div class="div-conatiner">
      <p class="p-name"> Name: ${o.name}</p>
      <p class="p-loc"> Location: ${o.location}</p>
      <p class="p-desc"> Description: ${o.description}</p>
      <p class="p-created"> Created by: ${o.created_by}</p>
     <p class="p-uname"> Username: ${o.users_name}</p>
     </div>
  `;
});

$('body').append(htmlText);
.div-conatiner {
  background-color: #eeeeee;
  margin-bottom: 5px;
  padding: 5px;
}

.div-conatiner p {
  margin: 0px;
}
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 感谢@Eddie who 的精彩输出。但是当我想在每个元素上分配 id 属性时该怎么办?
  • 对不起,我忘记在 json api 数据上提及图像 url。当还有图像要显示时该怎么办。 "图片": "rajpurohit.s3-us-west-2.amazonaws.com/images/…",
  • @MohammadIqbal,你的意思是如果你想添加'id'属性?
  • 是的,你是对的。我必须为 css 使用 id 属性,并且还要获取 div 的值作为参数传递
  • @MohammadIqbal 请检查更新的代码。我为 css 添加了类属性
【解决方案2】:

试试这个:

<div id="json"></div>
<script>
        var obj = {"data": [
{
 "name": "Rehan",
 "location": "Pune",
 "description": "hello hi",
 "created_by": 13692,
 "users_name": "xyz",
},
{
  "name": "Sameer",
  "location": "Bangalore",
  "description": "how are you",
  "created_by": 13543,
  "users_name": "abc",
}
]}
var divId = document.getElementById("json")
for(var i=0;i<obj.data.length;i++)
for(var keys in obj.data[i]){
 console.log(keys +"-->"+obj.data[i][keys]);
 divId.innerHTML = divId.innerHTML + "<br/>"+ keys +"-->"+obj.data[i][keys];
}
</script>

小提琴:http://jsfiddle.net/Sourabh_/1m2tjth3/

您可以根据自己的需要进行修改。

【讨论】:

    【解决方案3】:

    假设您有一个 id 为 #table 的表,循环遍历 json 对象并为每个对象项附加一行:

    var jsonObj = { ... }
    
    for (i in jsonObj) {
       for (n in jsonObj[i]) {
          $('#table > tbody').append('<tr><th>' + n + '</th><td>' + jsonObj[i][n] +  '</td></tr>');
       }
    }
    

    var data = [
        {
         "name": "Rehan",
         "location": "Pune",
         "description": "hello hi",
         "created_by": 13692,
         "users_name": "xyz",
        },
        {
          "name": "Sameer",
          "location": "Bangalore",
          "description": "how are you",
          "created_by": 13543,
          "users_name": "abc",
        }];
    
    
    for (i=0;i<=data.length;i++) {
       for (n in data[i]) {
          $('#table > tbody').append('<tr><th>' + n + '</th><td>' + data[i][n] +  '</td></tr>');
       }
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <table id="table">
      <tbody>
      </tbody>
    </table>

    【讨论】:

    • 感谢您的回复,但我想在 div 中而不是在表格中显示该数据。
    • 我必须以以下格式显示该数据:
      Name Location Description created by 用户名
    • 所以,而不是行,只需附加 div 或 spans
    • 如果我也有图像数据,请告诉我该怎么做
    • 我的数据是一个列表(从查询集转换而来),我作为 Ajax 回调获得。它有两个字段:DistanceRate。使用您的解决方案几乎可以得到我想要的,除了第二个字段值作为新的 项目出现(即数据而不是一行出现在两个单独的行中 - 一个接一个)。我的数据看起来像这样(截断): [(2, Decimal('1'), Decimal('20.85')), (3, Decimal('101'), Decimal('21.55')), (4,十进制('106'),十进制('22.23')),...,]。如何设计循环以便在同一中获取两个字段值?
    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多