- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
您好,我正在尝试将 kinesis firehose 与 S3 结合使用。我试着阅读那些 s3 文件。我正在使用 GO 阅读它。
但是,我无法解析 JSON,因为值只是在没有任何分隔符的情况下附加。
这是文件的示例(请注意,原始输入是相互附加的,为了格式化目的,我用换行符将它们分开):
{"ticker_symbol":"PLM","sector":"FINANCIAL","change":-0.16,"price":19.99}
{"ticker_symbol":"AZL","sector":"HEALTHCARE","change":-0.78,"price":16.51}
{"ticker_symbol":"IOP","sector":"TECHNOLOGY","change":-1.98,"price":121.88}
{"ticker_symbol":"VVY","sector":"HEALTHCARE","change":-0.56,"price":47.62}
{"ticker_symbol":"BFH","sector":"RETAIL","change":0.74,"price":16.61}
{"ticker_symbol":"WAS","sector":"RETAIL","change":-0.6,"price":16.72}
我的问题是,如何在 Go 中解析它?我能想到的一种解决方案是将它们拆分为 }{
并再次附加它们。但这很老套。
或者 kinesis firehose 是否提供定界符?
------更新------
目前我已经实现了解决方案,将所有 }{
替换为 },{
然后在开头添加 [
和 ]
最后。然后解析它。
但是我仍在寻找替代方案,因为此解决方案会限制 json 对象内容中的任何 }{
最佳答案
创建一个简单的结构来解码分批传入的 json。所以每批 json 都被解码到一个 json 对象中。然后创建一个结构 slice ,将解析后的 json 附加到 slice 中。这会将您的结果 json 全部附加到结构的 slice 中。
package main
import (
"encoding/json"
"fmt"
)
type Ticker struct {
TickerSymbol string `json:"ticker_symbol"`
Sector string `json:"sector"`
Change float64 `json:"change"`
Price float64 `json:"price"`
}
var jsonBytes = []byte(`{"ticker_symbol":"PLM","sector":"FINANCIAL","change":-0.16,"price":19.99}`)
func main() {
var singleResult Ticker
var result []Ticker
if err := json.Unmarshal(jsonBytes, &singleResult); err != nil {
fmt.Println(err)
}
if len(result) == 0 {
result = append(result, singleResult)
}
fmt.Printf("%+v", result)
}
已编辑:
如果数据是批量传入的,其中包含相互附加的 json 对象,那么您可以使用正则表达式将 }
替换为 },
,然后最右边进行修剪,
使对象的有效 json 数组为:
package main
import (
"fmt"
"regexp"
"strings"
)
type Ticker struct {
TickerSymbol string `json:"ticker_symbol"`
Sector string `json:"sector"`
Change float64 `json:"change"`
Price float64 `json:"price"`
}
var str = `{"ticker_symbol":"PLM","sector":"FINANCIAL","change":-0.16,"price":19.99}
{"ticker_symbol":"AZL","sector":"HEALTHCARE","change":-0.78,"price":16.51}
{"ticker_symbol":"IOP","sector":"TECHNOLOGY","change":-1.98,"price":121.88}
{"ticker_symbol":"VVY","sector":"HEALTHCARE","change":-0.56,"price":47.62}
{"ticker_symbol":"BFH","sector":"RETAIL","change":0.74,"price":16.61}
{"ticker_symbol":"WAS","sector":"RETAIL","change":-0.6,"price":16.72}`
func main() {
r := regexp.MustCompile("}")
output := strings.TrimRight(r.ReplaceAllString(str, "},"), ",")
output = fmt.Sprintf("[%s]", output)
fmt.Println(output)
}
使用 r := regexp.MustCompile("}")
将帮助您不必担心 }{
之间的空格会干扰替换字符串。因此,只需将 }
替换为 },
,然后向右修剪即可。
此外,我使用 MustCompile 的原因是:
When creating constants with regular expressions you can use the MustCompile variation of Compile. A plain Compile won’t work for constants because it has 2 return values.
在 Go playground 上使用 json 解析的完整工作代码
关于json - 从 kinesis firehose 解析 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52638176/
我正在将 Java API 用于 Kinesis Firehose,并在可能的情况下利用 putRecordBatch()。但是,在我的应用程序中,我偶尔只发送一条记录,无法等待更多记录或将其缓存在内
我正在处理一个添加到 S3 的 XML 文件并将结果写入到 firehose,并将结果存储在同一个 S3 存储桶中,但目标文件名必须采用特定格式。我检查了文档,但看不到任何设置文件名格式的方法。我能找
按照此 guide 并创建 Kinesis Firehose 流。 我已按照指南进行操作,当我开始创建订阅过滤器(步骤 12)时,我在尝试发送到 S3 时遇到此错误: 调用 PutSubscripti
AWS Firehose已于今天发布。我正在研究它,并试图弄清楚如何使用AWS CLI将数据放入流中。我有一个简单的JSON有效负载和对应的Redshift表,其中的列映射到JSON属性。我尝试了各种
我正在尝试使用 Firehose API (JS)我不断收到以下错误: "InvalidArgumentException: Firehose is unable to assume role arn
我试图了解是否可以使用 kinesis firehose 将数据索引到 elasticsearch 到多个索引,方法是将索引名称和类型传递给它(类似于 elasticsaerch bulk api)
是否可以异步向 AWS 发送请求?在真正意义上。 如果我尝试以某种方式发送消息,则消息未送达: $firehose = new FirehoseClient($args); /
我将 AWS Kinesis Firehose 与自定义数据转换结合使用。 Lambda 用 Python 3.6 编写并返回如下所示的字符串: { "records": [
我有一个应用程序,我想构建一个包含 2-3 种组合事件类型的“最近事件”/firehose feed,例如帖子、评论和帖子点赞,以及其他内容 + 稍后可能会更多。我假设这是通过查询添加到数据库中的最后
我遇到了这个最可怕的场景,我想读取 kinesis firehose 在我们的 S3 上创建的文件。 Kinesis firehose 创建的文件并不是每个 json 对象都在一个新行上,而是一个 j
这个 11 年级的问题自 2010 年以来一直困扰着我,即使在大学毕业后我仍然无法弄清楚/找到解决方案。 Problem Description There is a very unusual str
我有以下 lambda 函数作为 Kinesis firehose 记录转换的一部分,它将 msgpack 记录从 kinesis 输入流转换为 json。 Lambda 运行时:python 3.6
我有一个用例,我必须每秒从不同的生产者收集数千条记录,并使用 AWS firehose 将它们推送到 Elasticsearch 。我还在 firehose 上使用数据转换 lambda,它在将记录传
所以我们有 100 种不同类型的消息进入我们的 Kinesis 流。我们只想保存 4 种类型。我知道 Kinesis 可以转换消息,但它也可以过滤吗?这是怎么做到的? 最佳答案 过滤只是一种转换,您可
账户 A 是我在其中创建 Kinesis 流的应用程序账户,我想在账户 B 中创建 Firehose 以从账户 A Kinesis 流中读取。这可能吗?我尝试按照 ( https://medium.c
将记录写入到配置为 S3 作为输出目标的 AWS Firehose 时,此数据在写入 S3 之前缓冲了多长时间?或者是否有最小尺寸阈值? 例如,我正在执行以下操作来添加记录: aws cli: aws
我正在为 S3 设置 Kinesis Firehose 传输流,我注意到您可以设置自定义 KMS key 以用于加密 S3 上的文件。 但是,如果 S3 存储桶已启用 KMS 加密,则无论如何都会对文
我已经阅读了很多关于向 firehose 添加换行符的类似问题,但它们都围绕着将换行符添加到源代码中。问题是我无权访问源,第三方正在将数据传输到我们的 Kinesis 实例,我无法将 '\n' 添加到
我正在尝试将一些数据从 API(谷歌股票/金融 API)写入我的 AWS Firehose 流。我已经在 Eclipse 上下载并安装了 AWS 插件,在 AWS 上设置了我的 Firehose 流,
您好,我正在尝试将 kinesis firehose 与 S3 结合使用。我试着阅读那些 s3 文件。我正在使用 GO 阅读它。 但是,我无法解析 JSON,因为值只是在没有任何分隔符的情况下附加。
我是一名优秀的程序员,十分优秀!