All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.kaitai.struct.JSON.scala Maven / Gradle / Ivy

package io.kaitai.struct

import io.kaitai.struct.translators.CommonLiterals

/** Common trait for all objects that can be serialized as JSON. */
trait Jsonable {
  /** Serialize current state of the object into JSON string. */
  def toJson: String
}

/**
  * Ultra-minimalistic JSON strings generator from arbitrary Scala objects.
  */
object JSON extends CommonLiterals {
  /**
    * Converts an arbitrary Scala object to JSON string representation.
    * @param obj object to convert
    * @return string representation in JSON format
    */
  def stringify(obj: Any): String = {
    obj match {
      case v: Jsonable => v.toJson
      case v: Int => v.toString
      case v: String => stringToJson(v)
      case v: Seq[_] => seqToJson(v)
      case v: Map[String, _] => mapToJson(v)
    }
  }

  /** octal escapes (which [[translators.CommonLiterals.strLiteralGenericCC]] uses by default) are not allowed in JSON */
  override def strLiteralGenericCC(code: Char): String = strLiteralUnicode(code)

  def stringToJson(str: String): String =
    doStringLiteral(str)

  def seqToJson(obj: Seq[_]): String =
    "[" + obj.map((x) => stringify(x)).mkString(",") + "]"

  def mapToJson(obj: Map[String, _]): String = {
    val kvs = obj.map { case (k, v) =>
      stringToJson(k) + ": " + stringify(v)
    }
    "{" + kvs.mkString(",") + "}"
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy