是否有json文件的预处理器?

时间:2012-09-14 19:19:59

标签: json preprocessor configuration-files

我有一些配置文件,我将复杂的对象值存储为序列化的json。目前,每个环境(localhost,dev,prod等)和客户端的每个安装都有一个配置文件。大多数值对于环境之间的配置是相同的,但不是全部。因此,对于三个环境和四个客户端,我目前有12个要管理的文件。

如果这是一个web.config文件,那么会有web.config转换来解决问题。如果这是c#,我将使用编译器预处理器指令,可以根据当前的构建配置替换不同的值。

有没有人知道任何基本上都是这样的方法,或者对尝试过的真实方法有一些好的建议?我想要的是为每个安装减少每个环境的文件数量。

5 个答案:

答案 0 :(得分:2)

配置的配置对我来说似乎总是有点过头了,但你可以使用属性文件来更改部分,并使用apache ant的<replace>任务来进行替换。像这样:

<replace 
    file="configure.json"
    propertyFile="config-of-config.properties">
  <replacefilter 
    token="@token1@" 
    property="property.key"/>
</replace>

答案 1 :(得分:1)

来自Google的

Jsonnet是一种语言,具有基于JSON的超集语法,添加了有助于在JSON格式中建模数据的高级语言功能。编译步骤生成JSON。我在一个项目中使用它来描述复杂的部署环境,这些环境有时会彼此继承并共享域属性,尽管它们在不同的实例之间使用它们的方式不同。 例如,实例包含应用程序,这些应用程序的租户订阅,合同,目的地等。所有这些属性的值都是在整个环境中重复出现的对象。

他们的文档非常全面,不要错过std functions,因为它们可以提供一些非常强大的数据呈现功能。

答案 2 :(得分:0)

这真的归结为你的全部筹码。

如果你在谈论一些仅在客户端运行的应用程序,没有任何服务器端处理,那么就没有预处理这样的东西。 您可以在实际使用数据之前进一步处理数据,但这并不意味着它将在服务页面之前进行处理 - 这意味着人们必须坐下来等待在需要该数据的应用程序之前发生数据可以初始化。

开始使用JSON的好处是,它只是一个数据存储,并且与语言无关,现在得到了广泛的支持。因此,如果它不是100%客户端,那么就没有什么能阻止您使用服务器上使用的任何语言进行预处理,并根据需要缓存这些文件的版本,以便为用户提供服务(和缓存)

如果你真的,真的需要一个系统来对客户端的配置文件进行实时处理,你已经完成了创建早期加载的应用程序视图的工作,但向用户显示它们是'重新推迟初始化(即:“loading ...”/ spinners),然后下载第二个JSON文件,该文件包含所有必需的特定于实现的数据(你将拥有12个这样的小文件,这应该很简单manage),将两个JSON文件解析为JS对象,并使用辅助文件中的附加数据扩展大型配置对象。

请注意:使用localhost或其他一些存储工具来缓存此问题,因此对于html5浏览器,这种较长时间的加载只会发生一次。

答案 3 :(得分:0)

有一个https://www.npmjs.com/package/json-variables

从概念上讲,它是一个函数,它接收字符串 ,JSON内容,并撒上带有特殊标记的变量,并生成字符串,并解析这些变量。就像 Sass Less 对CSS一样-用于干燥源代码。

这是一个例子。

您将在JSON文件中放入以下内容:

{
  "firstName": "customer.firstName",
  "message": "Hi %%_firstName_%%",
  "preheader": "%%_firstName_%%, look what's inside"
}

请注意它是如何干燥的-firstName值的唯一事实来源。

json-variables会将其处理为:

{
  "firstName": "customer.firstName",
  "message": "Hi customer.firstName",
  "preheader": "customer.firstName, look what's inside"
}

,即Hi %%_firstName_%%将在根级别上寻找firstName(但同样,它可能是一条更深的路径,例如data1.data2.firstName)。还可以解决根问题,也可以使用自定义数据结构等。

JSON处理任务难题的缺失部分是:

  • 意味着可以多种方式合并多个JSON文件(object-merge-advanced
  • 协调动作的手段-如果您首选的编程语言是JS,则Gulp很好
  • 表示按路径获取/设置值的方法(object-path-它的表示法仅使用点,不使用方括号key1.key2.array.2代替key1.key2.array[2]
  • 是指在一组JSON文件中维护一组相同的密钥-您在一个密钥中添加一个密钥,然后在所有其他密钥上添加密钥(object-fill-missing-keys

在上述情况下,我们至少可以执行两种方法:一对多或多对多。

以前-Gulp可能从一个或多个类似JSON的源文件中“烘焙”许多JSON文件,json-variables将引用干燥。

稍后-或者,也可以将其“管理”成一组JSON文件,呈现为分布文件集-Gulp监视src文件夹,运行object-fill-missing-keys以标准化架构,甚至可以对对象进行排序(是的, sorted-object)。

这全部取决于所需的JSON文件集有多相似,如何自定义值以及是手动还是以编程方式完成。

答案 4 :(得分:0)

我写了一个Squirrelistic JSON Preprocessor,它使用Golang Text Templates syntax根据提供的参数生成JSON文件。

JSON模板可以包括对其他模板的引用,使用条件逻辑,注释,变量以及Golang Text模板包提供的其他所有内容。