【发布时间】:2021-10-15 15:46:26
【问题描述】:
我在 S3 中有文件,每行结构都带有内联 JSON:
{ "resources": [{"resourceType":"A","id":"A",...},{...}] }
如果我在它上面运行胶水,我会得到“资源:数组”作为顶级元素。但是,我希望检查数组的元素并将其用作顶级表元素。每个 resources 数组的所有元素都将具有相同的架构。所以我期待
resourceType: string
id: string
....
理论上,自定义 JSON 分类器应该可以处理这个问题:
$.resources[*]
但是,路径没有被拾取。所以我仍然得到 resources:array 作为顶级元素。
我现在可以运行一些预处理来自己提取数组元素并逐行写入它们。但是,我想了解为什么我的路径不起作用。
更新 1:
这可能是我不理解的 JSON(其通过 JAVA Jackson 生成的有效 JSON)。如果我删除具有 resources 属性的外部对象并将结构更改为
[{"resourceType":"A","id":"A",...},{...}]
分类器$[*] 应该选择子对象。但我仍然得到 array:array 作为顶级元素。
更新 2:
确实是格式问题。如果我将 JSON 文件更改为
[
{"resourceType":"A","id":"A",...},{...}
]
$[*] 开始工作。
更新 3:
但它不解决了$.resources[*] 的问题以重新格式化为
{
"resources": [
{"resourceType":"A","id":"A",...},{...}
]
}
更新 4:
如果我获取我的文件并通过 Intellij 重新格式化运行它,从而生成一个所有嵌套元素都有换行符的 JSON 对象,它也开始使用 $.resources[*]。基本上,就像在 UPDATE 3 中一样,只是应用了结构。
{
"resources": [
{
"resourceType":"A",
"id":"A"
},
{
...
}
]
}
困扰我的是,我仍然不清楚有关结构的要求,因为 UPDATE 2 有效,但不是 UPDATE 3。我在文档中也找不到关于 JSON 结构的正式要求。
从这个意义上说,我想我已经得出了自己的问题的结论,但是系统学仍然有点不清楚。
【问题讨论】:
-
我发现这个讨论强调了分类器的更新可能需要重新创建相应的爬虫:stackoverflow.com/questions/49995877/… 为了排除这种情况,我创建了一个新的分类器和新的工作。这并没有解决问题。
标签: json amazon-web-services etl aws-glue