com.fasterxml.jackson.core.JsonToken Scala Examples
The following examples show how to use com.fasterxml.jackson.core.JsonToken.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: RelativePathSupport.scala From exodus with MIT License | 5 votes |
package com.wix.bazel.migrator.analyze import java.io.IOException import java.nio.file.{Path, Paths} import com.fasterxml.jackson.core.{JsonGenerator, JsonParser, JsonToken} import com.fasterxml.jackson.databind._ import com.fasterxml.jackson.databind.module.SimpleModule class RelativePathSupportingModule extends SimpleModule { addDeserializer(classOf[Path], new RelativePathSupportingDeserializer) addSerializer(classOf[Path], new RelativePathSupportingSerializer) } class RelativePathSupportingSerializer extends JsonSerializer[Path] { @throws[IOException] def serialize(value: Path, gen: JsonGenerator, serializers: SerializerProvider): Unit = value match { case null => gen.writeNull() case _ => gen.writeString(value.toString) } } class RelativePathSupportingDeserializer extends JsonDeserializer[Path] { @throws[IOException] def deserialize(p: JsonParser, ctxt: DeserializationContext): Path = p.getCurrentToken match { case JsonToken.VALUE_NULL => null case JsonToken.VALUE_STRING => Paths.get(p.readValueAs(classOf[String])) case _ => throw ctxt.wrongTokenException(p, JsonToken.VALUE_STRING, "The value of a java.nio.file.Path must be a string") } }
Example 2
Source File: SourceModuleSupport.scala From exodus with MIT License | 5 votes |
package com.wix.bazel.migrator.analyze import java.io.IOException import com.fasterxml.jackson.core.{JsonGenerator, JsonParser, JsonToken} import com.fasterxml.jackson.databind._ import com.fasterxml.jackson.databind.module.SimpleModule import com.wix.bazel.migrator.model.SourceModule class SourceModuleSupportingModule(modules: Set[SourceModule]) extends SimpleModule { addDeserializer(classOf[SourceModule], new SourceModuleSupportingDeserializer(modules)) addSerializer(classOf[SourceModule], new SourceModuleSupportingSerializer) } class SourceModuleSupportingSerializer extends JsonSerializer[SourceModule] { @throws[IOException] def serialize(value: SourceModule, gen: JsonGenerator, serializers: SerializerProvider): Unit = value match { case null => gen.writeNull() case _ => gen.writeString(value.relativePathFromMonoRepoRoot) } } class SourceModuleSupportingDeserializer(modules: Set[SourceModule]) extends JsonDeserializer[SourceModule] { @throws[IOException] def deserialize(p: JsonParser, ctxt: DeserializationContext): SourceModule = p.getCurrentToken match { case JsonToken.VALUE_NULL => null case JsonToken.VALUE_STRING => { val relativePath = p.readValueAs(classOf[String]) modules.find(_.relativePathFromMonoRepoRoot == relativePath) .getOrElse(throw ctxt.weirdStringException(relativePath, classOf[SourceModule], s"could not find module with relative path for $relativePath")) } case token => throw ctxt.wrongTokenException(p, JsonToken.VALUE_STRING, s"The value of a module must be a string and currently is $token") } }
Example 3
Source File: Kind.scala From incubator-livy with Apache License 2.0 | 5 votes |
package org.apache.livy.sessions import com.fasterxml.jackson.core.{JsonGenerator, JsonParser, JsonToken} import com.fasterxml.jackson.databind._ import com.fasterxml.jackson.databind.module.SimpleModule sealed abstract class Kind(val name: String) { override def toString: String = name } object Spark extends Kind("spark") object PySpark extends Kind("pyspark") object SparkR extends Kind("sparkr") object Shared extends Kind("shared") object SQL extends Kind("sql") object Kind { def apply(kind: String): Kind = kind match { case "spark" | "scala" => Spark case "pyspark" | "python" => PySpark case "sparkr" | "r" => SparkR case "shared" => Shared case "sql" => SQL case other => throw new IllegalArgumentException(s"Invalid kind: $other") } } class SessionKindModule extends SimpleModule("SessionKind") { addSerializer(classOf[Kind], new JsonSerializer[Kind]() { override def serialize(value: Kind, jgen: JsonGenerator, provider: SerializerProvider): Unit = { jgen.writeString(value.toString) } }) addDeserializer(classOf[Kind], new JsonDeserializer[Kind]() { override def deserialize(jp: JsonParser, ctxt: DeserializationContext): Kind = { require(jp.getCurrentToken() == JsonToken.VALUE_STRING, "Kind should be a string.") Kind(jp.getText()) } }) }
Example 4
Source File: JsonLifter.scala From diffy with GNU Affero General Public License v3.0 | 5 votes |
package ai.diffy.lifter import com.fasterxml.jackson.core.{JsonGenerator, JsonToken} import com.fasterxml.jackson.databind.annotation.JsonSerialize import com.fasterxml.jackson.databind.ser.std.StdSerializer import com.fasterxml.jackson.databind.{JsonNode, ObjectMapper, SerializerProvider} import com.fasterxml.jackson.module.scala.DefaultScalaModule import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper import com.twitter.util.Try import scala.collection.JavaConversions._ import scala.language.postfixOps import scala.reflect.runtime.universe.runtimeMirror import scala.tools.reflect.ToolBox import scala.util.control.NoStackTrace object JsonLifter { @JsonSerialize(using = classOf[JsonNullSerializer]) object JsonNull object JsonParseError extends Exception with NoStackTrace val toolbox = runtimeMirror(getClass.getClassLoader).mkToolBox() val Mapper = new ObjectMapper with ScalaObjectMapper Mapper.registerModule(DefaultScalaModule) def apply(obj: Any): JsonNode = Mapper.valueToTree(obj) def lift(node: JsonNode): Any = node.asToken match { case JsonToken.START_ARRAY => node.elements.toSeq.map { element => lift(element) } case JsonToken.START_OBJECT => { val fields = node.fieldNames.toSet if (fields.exists{ field => Try(toolbox.parse(s"object ${field}123")).isThrow}) { node.fields map {field => (field.getKey -> lift(field.getValue))} toMap } else { FieldMap( node.fields map {field => (field.getKey -> lift(field.getValue))} toMap ) } } case JsonToken.VALUE_FALSE => false case JsonToken.VALUE_NULL => JsonNull case JsonToken.VALUE_NUMBER_FLOAT => node.asDouble case JsonToken.VALUE_NUMBER_INT => node.asLong case JsonToken.VALUE_TRUE => true case JsonToken.VALUE_STRING => node.textValue case _ => throw JsonParseError } def decode(json: String): JsonNode = Mapper.readTree(json) def encode(item: Any): String = Mapper.writer.writeValueAsString(item) } class JsonNullSerializer(clazz: Class[Any]) extends StdSerializer[Any](clazz) { def this() { this(null) } override def serialize(t: Any, jsonGenerator: JsonGenerator, serializerProvider: SerializerProvider): Unit = { jsonGenerator.writeNull() } }
Example 5
Source File: JacksonParserSuite.scala From circe-jackson with Apache License 2.0 | 5 votes |
package io.circe.jackson import cats.data.Validated import com.fasterxml.jackson.core.JsonToken import com.fasterxml.jackson.databind.{ ObjectMapper, ObjectReader } import io.circe.Json import io.circe.testing.ParserTests import java.io.{ ByteArrayInputStream, File } import scala.io.Source class JacksonParserSuite extends CirceSuite with JacksonInstances { checkAll("Parser", ParserTests(`package`).fromString(arbitraryCleanedJson, shrinkJson)) checkAll( "Parser", ParserTests(`package`).fromFunction[Array[Byte]]("fromByteArray")( s => s.getBytes("UTF-8"), p => p.parseByteArray _, p => p.decodeByteArray[Json] _, p => p.decodeByteArrayAccumulating[Json] _ )(arbitraryCleanedJson, shrinkJson) ) "parse and decode(Accumulating)" should "fail on invalid input" in forAll { (s: String) => assert(parse(s"Not JSON $s").isLeft) assert(decode[Json](s"Not JSON $s").isLeft) assert(decodeAccumulating[Json](s"Not JSON $s").isInvalid) } "parseFile and decodeFile(Accumulating)" should "parse a JSON file" in { val url = getClass.getResource("/io/circe/jackson/examples/glossary.json") val file = new File(url.toURI) assert(decodeFile[Json](file) === Right(glossary)) assert(decodeFileAccumulating[Json](file) == Validated.valid(glossary)) assert(parseFile(file) === Right(glossary)) } "parseByteArray and decodeByteArray(Accumulating)" should "parse an array of elementAsBytes" in { val bytes = glossaryAsBytes assert(decodeByteArray[Json](bytes) === Right(glossary)) assert(decodeByteArrayAccumulating[Json](bytes) === Validated.valid(glossary)) assert(parseByteArray(bytes) === Right(glossary)) } for (elementCount <- 1 to 4) { "CirceJsonDeserializer" should s"be useable with Jackson's MappingIterator " + s"with ${elementCount} elements in array" in { val input = new ByteArrayInputStream(createJsonArrayAsBytes(glossaryAsBytes, elementCount)) val objectMapper = new ObjectMapper() objectMapper.registerModule(CirceJsonModule) val jsonParser = objectMapper.getFactory.createParser(input) assert(jsonParser.nextToken() == JsonToken.START_ARRAY) assert(jsonParser.nextToken() == JsonToken.START_OBJECT) val reader = createReader(objectMapper).forType(classOf[Json]) val iterator = reader.readValues[Json](jsonParser) var counter = 0 while (iterator.hasNext) { val glossaryFromIterator = iterator.next() assert(glossary == glossaryFromIterator) counter = counter + 1 } assert(counter == elementCount) } } // workaround warnings from compiler with Jackson 2.5 @unchecked private def createReader(objectMapper: ObjectMapper): ObjectReader = objectMapper.reader() private def createJsonArrayAsBytes(elementAsBytes: Array[Byte], elementCount: Int): Array[Byte] = { val byteArrayOutput = new java.io.ByteArrayOutputStream() byteArrayOutput.write('[') for (i <- 1 to elementCount) { if (i != 1) { byteArrayOutput.write(',') } byteArrayOutput.write(elementAsBytes) } byteArrayOutput.write(']') byteArrayOutput.toByteArray } private def glossaryAsBytes = { val stream = getClass.getResourceAsStream("/io/circe/jackson/examples/glossary.json") val source = Source.fromInputStream(stream) val bytes = source.map(_.toByte).toArray source.close() bytes } }
Example 6
Source File: MListDeserializer.scala From sope with Apache License 2.0 | 5 votes |
package com.sope.etl.transform.model import com.fasterxml.jackson.core.{JsonParser, JsonToken} import com.fasterxml.jackson.databind.DeserializationContext import com.fasterxml.jackson.databind.deser.std.StdDeserializer import com.sope.etl.annotations.SqlExpr import com.sope.etl.transform.model.action.TransformActionRoot import com.sope.etl.transform.model.io.input.SourceTypeRoot import com.sope.etl.transform.model.io.output.TargetTypeRoot import com.sope.etl.utils.SQLChecker.checkSQL import com.sope.utils.Logging import scala.collection.mutable import scala.reflect.ClassTag import scala.reflect.runtime.universe._ if (p.getCurrentToken != JsonToken.START_ARRAY) { val location = p.getCurrentLocation log.error(s"Invalid list definition for ${p.getCurrentName} tag") failures += Failed("Invalid yaml list definition", location.getLineNr, location.getColumnNr) return MList(data, failures) } while (p.nextToken() != JsonToken.END_ARRAY) { if (p.getCurrentToken == JsonToken.START_OBJECT && Option(p.getCurrentName).isEmpty) { val location = p.getCurrentLocation try { val validElem = p.readValueAs[T](clz) // Check if the element has any SQL expression/ SQL to be validated val clazz = mirror.staticClass(validElem.getClass.getCanonicalName) val objMirror = mirror.reflect(validElem) clazz.selfType.members.collect { case m: MethodSymbol if m.isCaseAccessor && m.annotations.exists(_.tree.tpe =:= typeOf[SqlExpr]) => val expr = objMirror.reflectField(m).get if (m.name.toString.trim == "sql") (expr, true) else (expr, false) }.foreach { case (expr, isSql) => checkSQL(expr, isSql) } log.trace(s"Successfully Parsed element of type $clz :- $validElem") data += validElem } catch { case e: Exception => log.error(s"Parsing failed with message ${e.getMessage} at ${location.getLineNr}:${location.getColumnNr}") failures += Failed(e.getMessage, location.getLineNr, location.getColumnNr) } } else { // Cases where the next token might be an internal object/array as result of failure on the root object. // These are skipped and token is moved to next object at root. if ((p.getCurrentToken == JsonToken.START_OBJECT || p.getCurrentToken == JsonToken.START_ARRAY) && Option(p.getCurrentName).isDefined) { log.debug("Skipping Current Token: " + p.getCurrentToken + " with Name: " + p.getCurrentName) p.skipChildren() } } } MList(data, failures) } override def getNullValue: MList[T] = MList[T](Nil) } object MListDeserializer { class TransformationDeserializer extends MListDeserializer(classOf[Transformation]) class ActionDeserializer extends MListDeserializer(classOf[TransformActionRoot]) class InputDeserializer extends MListDeserializer(classOf[SourceTypeRoot]) class TargetDeserializer extends MListDeserializer(classOf[TargetTypeRoot]) }