2015-11-04 51 views
0

警告:我不是一個編碼器,我幾乎可以肯定我濫用了術語。Jekyll/Liquid>創建JSON>替換散列輸出中的鍵值

簡稱:

當輸出的陣列,如何替換的值用於陣列中與來自在數據文件中陣列的鍵的替代值的特定鍵?

我將使用簡化的例子爲簡潔。

我有和前面的對象關鍵/值的數組。

article: 
    name: An article 
    date: some date 
    author: Tim 

I輸出數組使用jsonify標籤,像這樣:

{{ page.article | jsonify }} 

我也有一個人的數據文件,像這樣:

Tim 
    firstName: Tim 
    surname: Bradley 
    occupation: coffee consumer 

Bob 
    firstName: Robert 
    surname: De Niro 
    occupation: Taxi Driver 

我想要做的就是輸出article數組,但用數值文件對象的值(比如Bradley)替換一個鍵(作者)的值(Tim)。

我猜想的過程可能是這樣的:1。 走了過來陣列 2.找到筆者值 3.匹配值對應的數據項 4.捕獲數據項的替代值 5.更換頁面數組的鍵值與項目的關鍵值替換 6.輸出修改陣列

我想選擇鍵值屬性(「作者」=>「值」),而不是它的值(「蒂姆」),因爲在實踐中值(「 Tim「)在對象中重複多次,我無法選擇特定的一個 - 除非有人知道如何選擇」作者「之後的第一個Tim。

我不想簡單地重複數組的值,因爲我設想在逐個案例(逐頁讀取)的基礎上添加和刪除關鍵值。

我該怎麼做?

這甚至可以用液體和jekyll來完成嗎?

這是否對任何人都有意義?

感謝您提前提供任何幫助!

編輯:

我通過在澄清一個嘗試的方式增加了一些意見。我再一次警告說,我幾乎肯定混淆了我的術語。

我已經做了一些研究,我輸出的是散列作爲json對象。

基本上,我想要的是輸出將散列中特定鍵的值替換爲從數據文件生成的相應散列json。

看過可用的過濾器和操作符之後,我認爲答案將在於捕獲兩個哈希集合的輸出,然後使用替換過濾器將相應數據文件的值替換爲原始哈希中的鍵值組。

如果有人沒有打敗我,我會在我想出來的時候發表一個答案 - 但我現在在盤子上還有其他東西。

回答

0

首先,我不知道爲什麼你前面的問題是

--- 
article: 
    name: An article 
    date: some date 
    author: Tim 
--- 

,而不是

--- 
name: An article 
date: some date 
author: Tim 
--- 

我會用第二種形式去,因爲它需要更短的表達得到DATAS它。例如:page.article.author vs page.author

您的數據文件也無法驗證。正確的方式是:

Tim: 
    firstName: Tim 
    surname: Bradley 
    occupation: coffee consumer 

Bob: 
    firstName: Robert 
    surname: De Niro 
    occupation: Taxi Driver 

現在,當你想從文章或網頁訪問DATAS作者的DATAS,你沒有義務來代替由作者DATAS作者關鍵。您可以從剛剛的關鍵提取作者DATAS:

{% for post in site.posts %} 
    <h1>{{ post.title }}</h1> 

    # creating a new variable containing an author object 
    {% assign author = site.data.authors[post.author] %} 

    # if we have found an author 
    {% if author %} 
    <p>{{ author.firstName }} {{ author.surname }}</p> 
    {% endif %} 

{% endfor %} 
+0

謝謝你的迴應,David。你很好地解釋了這個方法,當輸出是一個數組中的值時,這很好。我所追求的基本上是一個數組輸出過濾器。我會根據你的意見修改我的問題,以便讓別人更清楚。再一次,謝謝你。 – TBB

0

這個答案是哈克(不優雅),但它得到了這份工作完成,在沒有清潔的解決方案中已經提供了我在這裏張貼此。

問題:我的目標是以json格式輸出散列,但用數據文件中的值替換特定值。

我無法找到在輸出之前操作數據的方法。相反,我採取了捕獲相關字符串輸出的過程,然後使用替換過濾器來替換值。

步驟一:捕捉價值的更換(OPTIONALLY KEY TOO)

我拍攝的,我想以JSON格式,以取代的價值。我手動插入JSON格式的密鑰過了,萬一有相同的字符串的其他實例中值在散列其他鍵:

{% capture articleAuthorNameValue %} 
"author":"{{ page.article.author }}" 
{% endcapture %} 

第二步:捕捉替代值

自我解釋,但再次記住使用jsonify過濾器,因爲您正在替換以json格式表示的值。

{% capture articleAuthorNameSubstituteValue %} 
{{ site.data.person[page.article.author] | jsonify }} 
{% endcapture %} 

第三步: OUTPUT &替代

輸出的值作爲JSON和替換捕獲的值。

{{ page.article | jsonify | replace: articleAuthorNameValue, articleAuthorNameSubstituteValue }} 

正如我暗示的 - 非常醜陋,但完成了工作。