2017-09-14 62 views
0

我有一個JSON(縮寫版),如下所述。關聯數組到表

{ 
    "jobs": [ 
     {"name": "Start", "value": "Ready"}, 
     {"name": "Date", "value": "2017-09-11"}, 
     {"name": "Crew", "value": "Crew 3"}] 
} 

我想讀取JSON的值來生成Tableau中的表。 每個名稱元件是設置爲列標題,我試圖從每個JSON 值讀取到正確的列。

我的顯示器應該如下所示。

|開始|日期|船員|
|準備好| 2017-09-11 |船員3 |

我在Taleau中創建瞭如下的模式。

myConnector.getSchema = function (schemaCallback) { 
    var cols = [ 
     { id : "start", alias : "Start", dataType: tableau.dataTypeEnum.string }, 
     { id : "date", alias : "Date", dataType: tableau.dataTypeEnum.datetime }, 
     { id : "crew", alias : "Crew", dataType: tableau.dataTypeEnum.string }]; 

而且我的JavaScript生成是這樣的:

var resp = response; // Response data from some API call - JSON as described above 
var tableData = []; 
// Iterate over the JSON object 
for (var i = 0, len = feat.length; i < len; i++) { 
    tableData.push(
     { "start": resp[1]['value'] }, 
     { "date": resp[2]['value'] }, 
     { "crew": resp[3]['value'] }); 
     } 

     table.appendRows(tableData); 
     doneCallback(); 
    }); 
} 

然而,當這的Tableau產生,每個值值是正確的列,但每個值值是一個新行。而不是1行中的所有值。

E.g.

|開始|日期|船員|

|準備好| - | - |

| - | 2017-09-11 | - |

| - | - |船員3 |

如何循環瀏覽JSON並將每個值添加到tableData對象,以便所有值都在同一行中?

+0

我只是猜測,但是從你的輸出似乎你可能需要與添加數據和對象與所有設置爲匹配列鍵:'{開始:「檢查」 ,日期:'this',船員:'row'}',你可以做小提琴嗎? – maioman

+0

你爲什麼要單獨推送值而不是單個對象? – Wainage

+0

你可以改變'tableData.push( {「start」:resp [1] ['value']}, {「date」:resp [2] ['value']}, {「crew」:resp [3] ['value']}); }爲'tableData.push({「start」:resp [1] ['value'], 「date」:resp [2] ['value'], 「crew」:resp [3] ['值']}); }' – Thijs

回答

1

您可以將所有內容放入對象數組中。從這裏您可以迭代這些值並將它們插入到表中。

const data = {"artists": [{"name": "Start", "value": "Ready"},{"name": "Date", "value": "2017-09-11"},{ "name": "Crew", "value": "artists Crew 1" }],"labor":[{"name": "Start", "value":"Ready"},{"name": "Date", "value": "2017-09-2"},{ "name": "Crew", "value": " labor Crew 2" }],accountant: [{"name": "Start", "value": "Ready"},{"name": "Date", "value": "2017-09-13"},{ "name": "Crew", "value": "account Crew 3" }],"somethingElse":[{"name": "Start", "value": "Ready"},{"name": "Date", "value": "2017-09-14"},{ "name": "Crew", "value": "somethingElse Crew 4"}],}, 
 
tableData =Object.entries(data).map(x => ({ Ready: x[1][0].value, Date: x[1][1].value, Crew: x[1][2].value })); 
 
console.log(tableData);