Search code examples
javascriptjqueryjsonbootstrap-4bootstrap-table

Populate Bootstrap Table with data from json source


I,m new in working with bootstrap and json files and I came to the following problem:

I've got the following code:

<div class="container">

  <h1 class="text text-success text-center ">Kontoauszug</h1>

  <table id="table" data-toggle="table" data-url="/json/data.json">
    <thead>
    <tr>
      <th data-field="auszug.betrag">ID</th>
      <th data-field="auszug.unix">Item Name</th>
      <th data-field="auszug.transaktionsart">Item Price</th>
    </tr>
    </thead>
  </table>

</div>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>

<link rel="stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href= "https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.css">
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.18.0/dist/bootstrap-table.min.css">

And the json I'm working with has the following structure:

{
  "auszug": {
    "1604400036082-3450": {
      "betrag": -367.5,
      "von/an_uuid": "Test1",
      "von/an": "Test1",
      "autorisiert-durch": "SYSTEM",
      "unix": 1604400036,
      "transaktionsart": "Lohnzahlung"
    },
    "1604406781759-8437": {
      "betrag": 85.17,
      "von/an": "Test2",
      "autorisiert-durch": "SYSTEM",
      "unix": 1604406782,
      "transaktionsart": "Überweisung"
    },
    "1604395596115-5983": {
      "betrag": 1226.48,
      "von/an": "Test3",
      "autorisiert-durch": "SYSTEM",
      "unix": 1604395596,
      "transaktionsart": "Überweisung"
    }
  },
  "kontonummer": "DEF05487151498683",
  "kontostand": 44641548.66,
  "success": true
}

But when I try to run the code I get "No matching records found". How do I get the data from a json like this into the table?

Many thanks in advance!

Edit: I don't know how to exactly get the responseText in here but here's a screenshot of the console.log: console log responseText


Solution

  • What can be observed is that you don't know the key because it is dynamic. What you can do is, make an ajax call and get the data in a variable. Now you have to flat the response so you can pass the Flat array to Bootstrap table. Instead of using data-url attribute you follow the process given in fiddle

    I have added a fiddle which you can use as an example. I have also added appropriate comment.

    HTML

    <link href="https://unpkg.com/bootstrap-table@1.18.0/dist/bootstrap-table.min.css" rel="stylesheet">
    
    <script src="https://unpkg.com/bootstrap-table@1.18.0/dist/bootstrap-table.min.js"></script>
    
    <table id="table">
      <thead>
        <tr>
          <th data-field="betrag">betrag</th>
          <th data-field="autorisiert-durch">autorisiert-durch</th>
          <th data-field="unix">unix</th>
        </tr>
      </thead>
    </table>
    

    your Script should be

    <script>
    var $table = $('#table')
    
      $(function() {
      
      // do an ajax call here to get the response. your response should be like responseData
      
      var responseData = {
        "1604400036082-3450": {
            "betrag": -367.5,
            "von/an_uuid": "asdqwe2413",
            "von/an": "Test1",
            "autorisiert-durch": "SYSTEM",
            "unix": 1604400036,
            "transaktionsart": "Überweisung"
            },
        "1604406781759-8437": {
            "betrag": 85.17,
            "von/an": "Test2",
            "autorisiert-durch": "SYSTEM",
            "unix": 1604406782,
            "transaktionsart": "Überweisung"
            },
        };
      
      var data = [];
      
      // Here you have to flat the array
      Object.keys(responseData).forEach(function(key){ 
      
      var value = responseData[key]; 
      data.push(value);
      })
        $table.bootstrapTable({data: data})
      })
      
      </script>
    

    Let me know if you need ajax version of this code.

    fiddle http://jsfiddle.net/8ngoh4y1/