【问题标题】:Java - best way to parse this sample dataJava - 解析此示例数据的最佳方式
【发布时间】:2012-12-25 09:43:06
【问题描述】:

我有这种形式的样本数据:

{
 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,而无需在现有的},{ 行中添加一个。

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

【问题讨论】:

  • 这似乎很适合语法,但不是你用两句话解释的。
  • 是每条记录都单独一行,还是为了可读性而这样做?
  • 是的,每条记录都在自己的行中。以上是从Notepad++直接复制粘贴。

标签: java string string-matching


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    没那么难:

    只需逐行读取文件:

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

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

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

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

    【讨论】:

    • 您好,谢谢您的帮助。我逐行读取数据,实际上设法将其转换为正确的 JSON 数据。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多