【问题标题】:How to remove non-ascii characters from logs?如何从日志中删除非ASCII字符?
【发布时间】:2018-10-17 15:22:33
【问题描述】:

我想从 Logs(json Strings) 中删除非 ascii 字符并解析它们。但我在我的 json 字符串开始之前看到这样的文本,如何删除这些类型的字符串并解析我的 JSON 字符串

SEQ^F!org.apache.hadoop.io.LongWritable^Yorg.apache.hadoop.io.Text^@^@^@^@^@^@ìþNmbÃw^G6ùó¯Ãl^ @^@^X^E^@^@^@^H^@^@^^¯/âë^Wú{

【问题讨论】:

    标签: json scala apache-spark hadoop non-ascii-characters


    【解决方案1】:

    如果安全的话,您可以将所有内容放到{ 之前,以便获得 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"]}
    

    然后使用任何 json api,我在下面的示例中使用 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"))
    

    【讨论】:

    • 如果我想解析所有键值对而不考虑特定元素。我该怎么做?
    • 您是否只想将 json 值作为字符串?如果是这样,请参阅我的第一个示例,在 { 之前删除任何内容就足够了。如果你能描述你想用json做什么会更好。
    • 我有一个 json,我想将它展平并存储在数据库中。如何遍历并展平并保存
    猜你喜欢
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2016-07-28
    相关资源
    最近更新 更多