由于我嵌套了 JSON 数据,如何对 getData() 中的行建模?
How to model the rows in getData() since i have nested JSON data?
我想为进入数据工作室的每个人显示这些字段: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]
},
...
]
*/
问题是
I'm not able to model the nested JSON data in Google Data Studio. I
have the problem exactly in the "addresses" field.
Could anyone tell me what format should be for the rows in this case?
如您所知,对于数据集的每个名称,显然不止一行(一个人有多个地址)。 Data Studio 只接受每个字段的单个数据,因为根本不支持数组。所以你需要在这方面努力。
有一些方法可以解决这个问题,但请始终牢记:
getSchema()
应该 return 连接器的所有可用字段(顺序并不重要,因为 Data Studio 始终按字母顺序对可用字段进行排序)
getData()
应该 return 一个值列表。但这里的顺序是相关的:它应该与传递给 getData()
的参数相同(这意味着结果应该是动态的,有时你会 return 所有值,有时不是,并且顺序可能变化)。
解决方案 1:Return 每条记录多行
既然你可以为每个名字生成多行,那就去做吧。
为此,您的字段定义 (=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:Return仅一个地址,忽略其他地址
如果您喜欢每人一行,您可以获取其中一个地址并仅显示它(通常是 main/primary 地址,或第一个地址)。
为此,您的字段定义 (=getSchema()
) 应包括字段 address_id
、address_city
和 address_primary
.
假设调用 getData()
时所有字段都按照它们被描述的相同顺序调用,rows
数组应该如下所示:
"rows": [
{
"values": ["Lio", 30, "7834", "ML", 1]
},
{
"values": ["Kali", 41, "3334", "WK", 1]
},
...
]
解决方案 3:Return 所有地址,在一个字段中序列化
如果您确实需要所有信息但不想要复杂的方案,这将很有帮助。
只需在您的字段定义 (=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
、... address_primaryN
.
我不会解释 rows
在这种情况下应该是什么样子,但是用其他例子不难猜到。
我想为进入数据工作室的每个人显示这些字段: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]
},
...
]
*/
I'm not able to model the nested JSON data in Google Data Studio. I have the problem exactly in the "addresses" field. Could anyone tell me what format should be for the rows in this case?
如您所知,对于数据集的每个名称,显然不止一行(一个人有多个地址)。 Data Studio 只接受每个字段的单个数据,因为根本不支持数组。所以你需要在这方面努力。
有一些方法可以解决这个问题,但请始终牢记:
getSchema()
应该 return 连接器的所有可用字段(顺序并不重要,因为 Data Studio 始终按字母顺序对可用字段进行排序)getData()
应该 return 一个值列表。但这里的顺序是相关的:它应该与传递给getData()
的参数相同(这意味着结果应该是动态的,有时你会 return 所有值,有时不是,并且顺序可能变化)。
解决方案 1:Return 每条记录多行
既然你可以为每个名字生成多行,那就去做吧。
为此,您的字段定义 (=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:Return仅一个地址,忽略其他地址
如果您喜欢每人一行,您可以获取其中一个地址并仅显示它(通常是 main/primary 地址,或第一个地址)。
为此,您的字段定义 (=getSchema()
) 应包括字段 address_id
、address_city
和 address_primary
.
假设调用 getData()
时所有字段都按照它们被描述的相同顺序调用,rows
数组应该如下所示:
"rows": [
{
"values": ["Lio", 30, "7834", "ML", 1]
},
{
"values": ["Kali", 41, "3334", "WK", 1]
},
...
]
解决方案 3:Return 所有地址,在一个字段中序列化
如果您确实需要所有信息但不想要复杂的方案,这将很有帮助。
只需在您的字段定义 (=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
、... address_primaryN
.
我不会解释 rows
在这种情况下应该是什么样子,但是用其他例子不难猜到。