2017-01-17 6 views
1

私は2000以上のエントリのZoteroデータベースで作業しており、Bootstrap Tableを使って公開したいと考えています。ブートストラップテーブルのネストされた配列の処理

しかし、私はZoteroフィールドが動作する方法、つまり著者フィールドのためにJSONファイルに問題があります。例:

"author": [{ 
    "family": "Obama", 
    "given": "Barack" 
     } 
    , 
     { 
    "family": "Obama", 
    "given": "Michele" 
     }] 

Iが「著者」フィールドを使用する場合、これは、いずれかの[オブジェクトのオブジェクト]として翻訳、またはIを介して(FlatJson拡張子を使用し、のみネストされた値を使用することができ、「author.0.family」 )、検索を中断し、すべての著者を返しません。

更新:あなたはそれを処理するために、行のフォーマッタを使用することができるはずjsfiddle

答えて

2

参照してください。

あなたのテーブルの行ヘッダは次のようになります。

ブートストラップテーブルをインスタンス化するJavaScript以下
<th data-field="author" data-formatter="authorFormatter"> 

、あなたはフォーマッタのコードを追加することができます。このようなものは、 "Barack Obama"で文字列を作るべきですが、好きなようにフォーマットすることはできます。

<script> 
function authorFormatter(value, row) { 
    if ((value) && (value[0].given)) { 
     return value[0].given + ' ' + value[0].family; 
    } 
} 
</script> 

ブートストラップテーブルのフォーマッタ機能により、必要に応じてテーブルにデータを表示しながらJSON APIをきれいに保つことが容易になります。

<table 
id="table" 
class="table table-striped" 
data-toggle="table" 
data-url="https://url.to.your.json" 
data-side-pagination="server"> 
    <thead> 
     <tr> 
      <th data-field="author" data-formatter="authorsFormatter">Authors</th> 
     </tr> 
    </thead> 
</table> 

そして、あなた:あなたのHTMLテーブルは次のようになります

{ 
"type": "chapter", 
"title": "Long title", 
"container-title": "Other title", 
"publisher": "Publisher", 
"publisher-place": "City", 
"page": "XX-XX", 
"source": "Library", 
"ISBN": "XXXXXXXXXXX", 
"container-author": 
    [ 
     { 
      "family": "XXX", 
      "given": "XXX" 
     } 
    ], 
    "author": 
    [ 
     { 
      "family": "Obama", 
      "given": "Barack" 
     }, 
     { 
      "family": "Obama", 
      "given": "Michelle" 
     } 
    ], 
    "issued": 
    { 
     "date-parts": 
      [ 
       [ "2012" ] 
      ] 
    } 

} 

:あなたのJSONを想定し

UPDATE

はこのような何か(あなたの例をオフに基づいて)を探しますjavascriptは次のようになります:

<script> 
// Initialize the bootstrap-table javascript 
var $table = $('#table'); 
$(function() { 
}); 

// Handle your authors formatter, looping through the 
// authors list 
function authorsFormatter(value) { 
    var authors = ''; 

    // Loop through the authors object 
    for (var index = 0; index < value.length; index++) { 
     authors += value[index].given + ' ' + value[index].family; 

     // Only show a comma if it's not the last one in the loop 
     if (index < (value.length - 1)) { 
      authors += ', '; 
     } 
    } 
    return authors; 
} 
</script> 
+0

これは私が探していたものです。本当にありがとうございます。しかし、私は一つの質問があります:これは "バラクオバマ"を返しますが、 "バラクオバマ、ミシェルオバマ"を返しません。 "authors"の下のすべてのエントリが返されるように関数に追加する方法を知っていますか? – east1999

+0

これは、JSONのフォーマット全体を見ることなく、言うのは難しいのですが、私はそれがこのようなものになりますと仮定します。 - ブック1 - 著者1 - 著者2 - ブック2 - 著者1 - 著者3 など? もしそうなら、あなたは$ .each()を使ってフォーマッタのループを通って各インデックスを調べるだけです。 **編集:** Argh ....書式設定が台無しになっています。私はjsfiddleか何かを思いついてみましょう。 '{\t \t "タイプ": "章"、 \t \t "タイトル": "長いタイトル"、 \t \t "コンテナタイトル": "その他のタイトル"、 \t \tフィールドの – snipe

+0

例"パブリッシャー": "出版社"、 \t \t "パブリッシャー-場所": "市"、 \t \t "ページ": "XX-XX"、 \t \t "ソース": "ライブラリ"、 \t \t「ISBN ":" XXXX XXXXXXX」、 \t \t "コンテナ作成者":[ \t \t \t { \t \t \t \t "家族": "XXX"、 \t \t \t \tが "所定の": "XXX" \t \t \t} \t \t]、 \t \t「著者」:[ \t \t \t { \t \t \t \t "家族": "XXX"、 \t \t \t \t "は、所与の": "XXX" \t \t \t}、 \t \t \t { \t \t \t \t "家族": "XXX"、 \t \t \t \t "given": "XXX" \t \t \t"発行された"\t \t]、 \t \t:{ \t \t \t "日付部品":[ \t \t \t \t [ \t \t \t \t \t "2012" \t \t \t \t] \t \t \t] \t \t} \t} ' – east1999

関連する問題