我想在数据工作室中显示这些字段:每个人的name, age, addresses_id, addresses_city, addresses_primary
。
{
"data": [
{
"name": "Lio",
"age": 30,
"addresses": [
{
"id": 7834,
"city": "ML",
"primary": 1
},
{
"id": 5034,
"city": "MM",
"primary": 1
}
]
},
{
"name": "Kali",
"age": 41,
"addresses": [
{
"id": 3334,
"city": "WK",
"primary": 1
},
{
"id": 1730,
"city": "DC",
"primary": 1
}
]
},
...
]
}
如果我不渲染addresses
字段就没有问题
return {
schema: requestedFields.build(),
rows: rows
};
//rows:
/*
"rows": [
{
"values": ["Lio", 30]
},
{
"values": ["Kali", 41]
},
...
]
*/
问题是
我无法在Google data Studio中对嵌套的JSON数据建模。我问题正好在";地址";领域有人能告诉我这种情况下的行应该是什么格式吗?
如您所知,对于数据集的每个名称,您显然有多行(一个人有多个地址(。Data Studio只接受每个字段的单个数据,因为根本不支持数组。所以你需要努力。
有一些方法可以解决这个问题,但请始终记住:
getSchema()
应该返回连接器的所有可用字段(顺序并不重要,因为Data Studio总是按字母顺序对可用字段进行排序(getData()
应该返回一个值列表。但这里的顺序是相关的:它应该与传递给getData()
的参数相同(这意味着结果应该是动态的,有时会返回所有值,有时不会,顺序可能会改变(
解决方案1:每条记录返回多行
由于您可以为每个名称生成多行,所以只需执行即可
为了实现这一点,字段定义(=getSchema()
(应该包括字段address_id
、address_city
和address_primary
(如果需要知道地址在列表中的位置,也可以添加address_order
(。
假设调用getData()
时,所有字段的描述顺序相同,则rows
数组应如下所示:
"rows": [
{
"values": ["Lio", 30, "7834", "ML", 1]
},
{
"values": ["Lio", 30, "5034", "MM", 1]
},
{
"values": ["Kali", 41, "3334", "WK", 1]
},
{
"values": ["Kali", 41, "1730", "DC", 1]
},
...
]
IMO,这是您数据的最佳解决方案。
解决方案2:只返回一个地址,忽略其他地址
如果你喜欢每人一行,你可以获取其中一个地址并只显示它(通常是主/主地址,或第一个(。
为此,字段定义(=getSchema()
(应包括字段address_id
、address_city
和address_primary
。
假设调用getData()
时,所有字段的描述顺序相同,则rows
数组应如下所示:
"rows": [
{
"values": ["Lio", 30, "7834", "ML", 1]
},
{
"values": ["Kali", 41, "3334", "WK", 1]
},
...
]
解决方案3:返回所有地址,在字段中序列化
如果你真的需要所有信息,但又不想要一个复杂的方案,这会很有帮助。
只需在字段定义(=getSchema()
(中创建一个名为addresses
的字段,并将JSON作为字符串(或您想要的任何其他格式(写入其中。
假设调用getData()
时,所有字段的描述顺序相同,则rows
数组应如下所示:
"rows": [
{
"values": ["Lio", 30, "[{"id": 7834, "city": "ML", "primary": 1}, {"id": 5034, "city": "MM", "primary": 1}]"]
},
{
"values": ["Kali", 41, "[{"id": 3334, "city": "WK", "primary": 1}, {"id": 1730, "city": "DC", "primary": 1}]"]
},
...
]
这个解决方案可能看起来毫无意义,但如果确实需要,可以稍后在DataStudio中使用REGEX与这些数据交互。
解决方案4:为每个地址创建不同的字段
如果您确定所有记录都有最大地址数(例如,在您的示例中,两个名称都有2个地址(,则可以创建多个字段。
字段定义(=getSchema()
(应包括字段address_id1
、address_city1
、address_primary1
、address_id2
。。。CCD_ 28。
我不会解释rows
在这种情况下应该是什么样子,但通过其他例子不难猜测。