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 解析器不兼容,因为这些字段没有被双引号括起来,而且我无法进行大量查找/替换。此外,每条记录的结尾没有用逗号分隔,所以虽然我可以将每条记录放入 aString[]中,但我无法将它们进一步分开。看这里:

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

通常我会split()用空格,但由于人名中有空格,所以不能这样做。

我做了一个大规模的查找/替换},来替换,};就像我上面说的那样,我能够分离出每条记录,但随后就无法再进一步了。我想我可能需要对这些数据进行更多的查找/替换操作以使其可用。理想情况下,我希望能够comma在每行数据的末尾添加一个,而不是在现有的},{行中添加一个。

最终目标是将这些数据插入到数据库中。它的原始文本及其格式。我无法更改源以重新格式化它,但我可以对这些数据做任何我想做的事情,因为它在一个大文本文件中。

4

2 回答 2

3

这并不难:

只需逐行读取文件:

如果您读取“{”,则调用 readObject() 方法,该方法将读取到下一个(包括)“}”。

在此 readObject 中:
您逐行阅读,并使用String.split()分隔符“:”;这样第一个存储在可变键中,值存储在 val 中。

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

现在要么通过将键与所有可能性进行比较来找到要设置的成员,要么使用反射来获取名为“键”的字段。

于 2013-01-10T21:29:08.723 回答
0

您可以使用 Matcher 类来分隔单个记录,然后会很容易,您可以使用 ':" 来拆分数据

于 2013-01-10T21:30:06.543 回答