javascript - 由于我嵌套了 JSON 数据,如何对 getData() 中的行进行建模?
问题描述
我想显示这些字段: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()
) 应包括 fieldsaddress_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()
应包括 fieldsaddress_id
和.address_city
address_primary
假设getData()
所有字段的调用顺序与它们描述的顺序相同,rows
数组应如下所示:
"rows": [
{
"values": ["Lio", 30, "7834", "ML", 1]
},
{
"values": ["Kali", 41, "3334", "WK", 1]
},
...
]
解决方案3:返回所有地址,在一个字段中序列化
如果您确实需要所有信息但不想要复杂的方案,这将很有帮助。
addresses
只需在您的字段定义 (= ) 中创建一个名为的字段getSchema()
,然后将 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
, ... address_primaryN
。
我不会解释rows
在这种情况下应该是什么样子,但不难猜测其他示例。
推荐阅读
- java - 从 gradle 项目中生成可执行文件
- python - 使用带有 kivy 按钮的 random.choice
- typescript - 使用 ExpressJS 和 TypeScript 检索查询参数的正确语法是什么?
- android - Final compiled manifest has screenOrientation not present on my manifest files
- pine-script - 计算满足条件的第一个柱和最后一个柱之间的柱数
- c++ - 如何使忽略功能也删除分隔符
- c - 我可以将 array[x][x] 写入管道吗?
- jbase - jBASE 如何确定文件的位置?
- r - 在 R 中使输出火花表动态化
- javascript - 即使在加载库后颜色框也会抛出错误