我遇到了一个用例,我需要从 txt 文件中解析一堆信息。有效载荷的核心是一堆key:value
对,我在开发时都不知道。
Wombat
Area: "Northern Alberta"
Tank Level (ft): -3.395
Temperature (C): 19.3
Batt Voltage: 13.09
Last Maintained: 2012-01-01
Secured: "Yes"
如您所见,字符串、数字、日期和布尔值都有潜力。还有一个用例,用户需要为某些属性创建规则,例如:
当储罐液位超过n时,请通知some.user@someplace.com
当包含“Alberta”的站点不安全时,请通知some.user@someplace.com
根据属性的类型,可用的规则类型会有所不同。我可能还需要对数字类型进行某种聚合。无论如何,长话短说,我需要类型信息。那么什么样的数据结构最好呢?
最初我打算使用不同的元组。
val stringAttributes: Array[(String, String)]
val doubleAttributes: Array[(String, Double)]
val dateAttributes: Array[(String, Date)]
现在这似乎是错误的,或者至少是丑陋的。然后我虽然可能是这样的:
val attributes: Array[(String, Any)]
现在我在很多地方都有模式匹配。另请注意,我正在为 Web 应用程序和数据库 (MongoDB) 使用 JSON 协议。给前端这样的东西会很方便:
{
site: "Wombat",
attributes: [
{ "Area": "Northern Alberta" },
{ "Tank Level (ft)": -3.395 },
{ "Temperature (C)": 19.3 }
]
}
但是在后端,我是否对类型进行编码?我解析原始 JSON 吗?最后,我正在寻找最好的方法来维护动态属性集的类型信息,同时支持 Web 客户端和数据库的 JSON。