我有以这种形式的样本数据:
{
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
,而不会在现有的},
和{
行中添加一个。{/ p>
最终目标是将此数据插入数据库。 它的原始文本和它的格式。我无法更改源代码以重新格式化它,但我可以对此数据执行任何操作,就像在大文本文件中一样。
答案 0 :(得分:3)
这不是那么困难:
只需逐行阅读文件:
如果您读取“{”调用readObject()方法,该方法将读取到下一个(包括)“}”。
在这个readObject中:
您逐行阅读,并使用String.split()
和分隔符“:”;
这样第一个存储在一个可变密钥中,而值存储在val。
String lineSplitted = line.split(":");
String key = lineSplitted[0];
String value = lineSplitted[1];
现在要么通过将键与所有可能性进行比较来找到要设置的成员,要么使用反射来获取名为“key”的字段。
答案 1 :(得分:0)
您可以使用Matcher类来分隔单个记录,然后将很容易,您可以使用':“分割数据