1

私はこの形式のサンプルデータを持っています:

{
 ID:2
 Type:None
 Reference1:6369-545.1
 Reference2:6369-545.2
 Name:"John Smith Abbott"
 Extra:""
},
{
 ID:3
 Type:None
 Reference1:7854-568.1
 Reference2:6369-545.2
 Name:"Dave St. Ledger"
 Extra:""
},
{
 ID:4
 Type:None
 Reference1:8765-177.1
 Reference2:6369-545.2
 Name:"Martha Stone"
 Extra:""
},
{
 ID:6
 Type:None
 Reference1:9856-487.1
 Reference2:6369-545.2
 Name:"Peter O'Neill"
 Extra:""
},

まだまだたくさんのレコードがありますが、私はほんの少しのサンプルを載せて、いくつかの名前を変更しました。

私の意見では、これはかなりひどいフォーマットです。フィールドが二重引用符で囲まれておらず、一括検索/置換を実行できないため、JavaのJSONパーサーとは互換性がありません。また、各レコードの末尾はコンマで区切られていないため、各レコードをに分割するString[]ことはできますが、それ以上区切ることはできません。ここを参照してください:

ID:2 Type:None Reference1:6369-545.1 Reference2:6369-545.2 Name:"John Smith Abbott" Extra:""}

普段split()はスペースでやっていますが、人名にスペースがあるのでできません。

大量の検索/置換を行っ},て置き換えました};。上記のように、各レコードを分離することはできましたが、それ以上進むことはできませんでした。このデータを使用できるようにするには、このデータに対してさらに検索/置換操作を行う必要があると思います。理想的には、既存の行commaに1つ追加せずに、データの各行の最後にを追加できるようにしたいと思います。},{

最終的な目標は、このデータをデータベースに挿入することです。その生のテキストとその形式。ソースを変更して再フォーマットすることはできませんが、大きなテキストファイルのように、このデータに対してやりたいことは何でもできます。

4

2 に答える 2

3

それはそれほど難しいことではありません:

ファイルを1行ずつ読んでください。

"{"を読み取る場合は、readObject()メソッドを呼び出します。このメソッドは、次の(含む)"}"まで読み取ります。

このreadObjectの場合:
行ごとに読み取りString.split()、区切り文字 ":";を使用します。最初のものが可変キーに格納され、値がvalに格納されるようにします。

String lineSplitted = line.split(":");
String key = lineSplitted[0];
String value = lineSplitted[1];

ここで、キーをすべての可能性と比較して設定するメンバーを見つけるか、リフレクションを使用して「key」という名前のフィールドを取得します。

于 2013-01-10T21:29:08.723 に答える
0

Matcherクラスを使用して単一のレコードを分離すると、簡単になり、「:」でデータを分割できます。

于 2013-01-10T21:30:06.543 に答える