如何从日志中删除非ascii字符?

x33g5p2x  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(405)

我想从日志中删除非ascii字符(json字符串)并解析它们。但是在我的json字符串开始之前我看到这样的文本,如何删除这些类型的字符串并解析我的json字符串
序号^f!org.apache.hadoop.io.longwritable^ yorg.apache.hadoop.io.text^@^@^@^@^@^@ã¬ã¾nmbã<92>宽^g6ãâ¹ã³â¯ãl^@^@^x^e^@^@^@^h^@^@^^â¯/ã¢ã«<8e>^wãº{

pxy2qtax

pxy2qtax1#

你可以放弃一切直到 { 如果这是安全的,那么你就可以得到json字符串。我想你的日志格式是 "garbage{json}" 例子,

scala> val log = """SEQ^F!org.apache.hadoop.io.LongWritable^Yorg.apache.hadoop.io.Text^@^@^@^@^@^@ìþNmbÃ<92>w^G6ùó¯Ãl^@^@^X^E^@^@^@^H^@^@^^¯/âë<8e>^Wú{"key1": "value1", "key2": ["1", "2"]}"""
log: String = SEQ^F!org.apache.hadoop.io.LongWritable^Yorg.apache.hadoop.io.Text^@^@^@^@^@^@ìþNmbÃ<92>w^G6ùó¯Ãl^@^@^X^E^@^@^@^H^@^@^^¯/âë<8e>^Wú{"key1": "value1", "key2": ["1", "2"]}

scala> val extractJson = log.dropWhile(char => char != '{')
extractJson: String = {"key1": "value1", "key2": ["1", "2"]}

然后使用任何JSONAPI,我在下面的例子中使用circe,

scala> import io.circe.parser._
import io.circe.parser._

scala> parse(extractJson)
res3: Either[io.circe.ParsingFailure,io.circe.Json] =
Right({
  "key1" : "value1",
  "key2" : [
    "1",
    "2"
  ]
})

如果你想提取任何特定的json元素,

scala> res3.map(j => (j \\ "key1").headOption)
res4: scala.util.Either[io.circe.ParsingFailure,Option[io.circe.Json]] = Right(Some("value1"))

相关问题