gpt4 book ai didi

json - 将变量注入(inject) JSON 配置文件

转载 作者:IT王子 更新时间:2023-10-29 01:08:48 25 4
gpt4 key购买 nike

我们有一个 AWS Lambda 函数可以动态构建测试环境,供我们的工程师通过 GitHub 拉取请求测试他们的代码。

此 Lambda 函数是使用 GitHub webhook 调用的,Github 借此发布为该特定产品配置测试环境所需的所有信息。

目前,AWS Lambda 函数是硬编码的,用于解析 POST 数据并构建测试环境。然而,随着被测试产品范围的增加和测试环境的范围变得更加多样化,我们希望摆脱硬编码方法;也是为了便于管理。

我想要做的是加载一个配置文件,最好是 JSON 格式,并将 GitHub POST 数据中的一些数据应用到配置文件,本质上是将数据注入(inject) JSON 配置。

我不知道如何处理这个问题。我在这里看到了一个问题,想做类似的事情,但在 Java 中: Inject dynamically generated data into JSON

最初我们的 Lambda 函数是用 Node.js 编写的,但我们已经开始转向 Go - 主要是因为这是一个有趣的新挑战。如果 Node.js 中有对此的解决方案,我会采用它,但如果 Go 中有可用的解决方案,那将是更可取的。

编辑:

配置文件和 GitHub POST 数据有两种不同的结构。

GitHub POST 数据 (大量精简):

{
"action": "opened",
"number": 89,
"pull_request": {
"url": "https://api.github.com/repos/Owner/ExampleRepository/pulls/89",
"head": {
"repo": {
"id": 123454678,
"name": "ExampleRepository"
}
}
}
}

示例配置文件 (也精简):

{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": [GitHub Post data].pull_request.url,
"Resources": {
"ElasticBeanstalk": {
"Type": "AWS::ElasticBeanstalk::Environment",
"Properties": {
"ApplicationName": [GitHub Post data].pull_request.head.repo + [GitHub Post data].number,
"Description": [GitHub Post data].pull_request.url
}
}
}
}

配置文件和 GitHub POST 数据都比这复杂得多。此外,配置文件将多次引用 POST 数据的各个部分,有时需要连接多个值。

最佳答案

尝试对 JSON 文本进行文本操作很容易出错(考虑转义和 unicode 序列,例如,这是有效的 JSON:{"a":"\"b"})。将 JSON 配置解码为 Go 值,对其进行修改,然后编码为 JSON 会更容易、更安全。

如果配置结构已知,则创建匹配的 Go 结构以对其进行精确建模。

如果配置结构未知或者您不想麻烦它,您可以解码为 interface{} 类型的值,然后对其进行修改。这将更加冗长,因为您必须为每个属性和索引执行类型断言。

为了减轻后者的痛苦,您可以使用第 3 方库,例如 github.com/icza/dyno (披露:我是作者)。

要从 POST 请求“合并”您现有的配置和数据,请查看此答案:"Merge" fields two structs of same type

关于json - 将变量注入(inject) JSON 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48444696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com