Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java—解析此示例数据的最佳方法_Java_String_String Matching - Fatal编程技术网

Java—解析此示例数据的最佳方法

Java—解析此示例数据的最佳方法,java,string,string-matching,Java,String,String Matching,我有以下表格中的样本数据: { 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

我有以下表格中的样本数据:

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

ID:2 Type:None Reference1:6369-545.1 Reference2:6369-545.2 Name:"John Smith Abbott" Extra:""}
通常我会
split()
按空格,但由于人名中有空格,这是无法做到的

我在
}上大量查找/替换,
替换为
}逗号,而无需在现有的
}、
{
行中添加逗号

最终目标是将这些数据插入数据库。
它的原始文本及其格式。我无法更改源以重新格式化它,但我可以对这些数据执行任何操作,因为它位于一个大文本文件中。

这并不难:

只需逐行读取文件:

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

在此readObject中:
逐行读取,并使用带分隔符的
String.split()
:; 这样,第一个存储在varaible键中,值存储在val中

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

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

您可以使用Matcher类来分隔单个记录,然后很容易,您可以使用“:"

这似乎很适合语法,但这不是你用两句话来解释的。每条记录都在自己的行上,还是你这样做是为了可读性?是的,每条记录都在自己的行上。上面是从记事本++直接复制和粘贴的。嘿,谢谢你的帮助。我逐行阅读数据,并实际转换了数据正确的JSON数据。谢谢!