<div id="app">
  <v-app>
    <v-main>
      <v-container class="pt-10 pb-5">
        <h1 class="text-center py-5">サンプルアプリ(シンプルテーブル/JSON)</h1>
        <p class="text-justify px-10 py-5">
          使用JSONファイル: <a href="https://uedayou.net/ld/library/20210505/東京都/公共図書館.json" target="_blank" rel="noreferrer">https://uedayou.net/ld/library/20210505/東京都/公共図書館.json</a>
        </p>
        <v-divider></v-divider>
        <v-simple-table>
          <template v-slot:default>
            <thead>
              <tr>
                <th>ID</th>
                <th>名称</th>
                <th>URL</th>
                <th>都道府県</th>
                <th>市区町村</th>
                <th>緯度</th>
                <th>経度</th>
              </tr>
            </thead>
            <tbody>
              <tr v-for="item in items" :key="item.id">
                <td>{{ item.id }}</td>
                <td>{{ item.label }}</td>
                <td>{{ item.url }}</td>
                <td>{{ item.pref }}</td>
                <td>{{ item.city }}</td>
                <td>{{ item.lat }}</td>
                <td>{{ item.long }}</td>
              </tr>
            </tbody>
          </template>
        </v-simple-table>
      </v-container>
    </v-main>
  </v-app>
  <v-overlay :value="isLoading">
    <v-progress-circular indeterminate size="64"></v-progress-circular>
  </v-overlay>
</div>
new Vue({
  el: "#app",
  vuetify: new Vuetify(),
  data() {
    return {
      items: [],
      isLoading: false
    };
  },
  mounted() {
    var self = this;
    self.isLoading = true;
    axios
      .get("https://uedayou.net/ld/library/20210505/東京都/公共図書館.json")
      .then(function (response) {
        Object.keys(response.data).forEach(function (key) {
          var data = response.data[key];
          if (!data["http://www.w3.org/2003/01/geo/wgs84_pos#lat"]) return;
          self.items.push({
            label: data["http://www.w3.org/2000/01/rdf-schema#label"][0].value,
            url: key,
            id: data["http://purl.org/dc/terms/identifier"][0].value,
            pref: data["http://schema.org/addressRegion"][0].value,
            city: data["http://schema.org/addressLocality"][0].value,
            lat: data["http://www.w3.org/2003/01/geo/wgs84_pos#lat"][0].value,
            long: data["http://www.w3.org/2003/01/geo/wgs84_pos#long"][0].value
          });
        });
      })
      .catch(function (error) {
        console.log(error);
      })
      .finally(function () {
        self.isLoading = false;
      });
  }
});

External CSS

  1. https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900
  2. https://cdn.jsdelivr.net/npm/@mdi/font@4.x/css/materialdesignicons.min.css
  3. https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.11/vue.min.js
  2. https://cdnjs.cloudflare.com/ajax/libs/vuetify/2.5.8/vuetify.min.js
  3. https://cdnjs.cloudflare.com/ajax/libs/axios/0.21.1/axios.min.js