由于我已经嵌套了JSON数据,如何在getData()中对行进行建模



我想在数据工作室中显示这些字段:每个人的name, age, addresses_id, addresses_city, addresses_primary

我的JSON数据

{
"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_idaddress_cityaddress_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_idaddress_cityaddress_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_id1address_city1address_primary1address_id2。。。CCD_ 28。

我不会解释rows在这种情况下应该是什么样子,但通过其他例子不难猜测。

相关内容

  • 没有找到相关文章

最新更新