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 に通知してください。「アルバータ」を含むサイトが保護
されていない
場合は、 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 をサポートしながら、属性の動的セットの型情報を維持する最善の方法を探しています。