我有这个字符串,它由一组连接在一起的JSON条目组成,如下所示
val docs = """
{"name": "Bilbo Baggins", "age": 50}{"name": "Gandalf", "age": 1000}{"name": "Thorin", "age": 195}{"name": "Balin", "age": 178}{"name": "Kíli", "age": 77} """
我想把它转换成这样的东西(每条记录后基本上都是逗号):
{"name": "Bilbo Baggins", "age": 50}, {"name": "Gandalf", "age": 1000}, {"name": "Thorin", "age": 195}
这样我就可以将这些记录保存到我的mongodb集合中。 它在SparkConnector文档中的使用方式是使用 split(" [\ r \ n] +"),它与linebreaks相匹配。这种方法很有效但不是我想要的,因为我使用 circe Library 来格式化JSON记录,并且这个库在这些记录中的列表中添加了换行符,因此字符串将被上面的拆分打破。
我现在所做的是,在形成 docs 字符串时,我添加" @#@" 在每两个条目之间,然后使用此表达式拆分它们。
这是正确的方法吗?还是有更聪明的方法?是否可以创建一个与括号及其内容匹配的正则表达式,并用于拆分字符串并按照我想要的方式返回结果?
答案 0 :(得分:0)
您可以使用正则表达式添加逗号以生成有效的json:
val s = """{"name": "Bilbo Baggins", "age": 50}{"name": "Gandalf", "age": 1000}"""
s.replaceAll("""(\{.*?\})""", """$1,""").dropRight(1)
输出:
res151: String = "{"name": "Bilbo Baggins", "age": 50},{"name": "Gandalf", "age": 1000}"
\{
与文字括号匹配,.*?
在下一个\}
之前对任何字符进行非贪婪匹配,(...)
是我们的捕获组在替换字符串中引用$ 1。