/** * Parses input JSON to {@link JsonArray}, special case of parsing. */ public JsonArray parseAsJsonArray(final String input) { return new JsonArray(parse(input)); }
/** * Parses request body into the target type. */ protected Object parseRequestBody(final String body, final Class targetType) { return JsonParser.create().parse(body, targetType); }
/** * Parses input JSON to {@link JsonObject}, special case of {@link #parse(String, Class)}. */ public JsonObject parseAsJsonObject(final String input) { return new JsonObject(parse(input)); }
/** * Parses input JSON to a list with specified component type. */ public <T> List<T> parseAsList(final String string, final Class<T> componentType) { return new JsonParser() .map(JsonParser.VALUES, componentType) .parse(string); }
/** * Parses input JSON to a list with specified key and value types. */ public <K, V> Map<K, V> parseAsMap( final String string, final Class<K> keyType, final Class<V> valueType) { return new JsonParser() .map(JsonParser.KEYS, keyType) .map(JsonParser.VALUES, valueType) .parse(string); }
@Test void testSimpleConversions() { JsonParsers.forEachParser(jsonParser -> { assertEquals(173, jsonParser.parse("\"173\"", Integer.class).intValue()); assertEquals("123", jsonParser.parse("123", String.class)); assertEquals(1, jsonParser.parse("true", Integer.class).intValue()); assertEquals(0, jsonParser.parse("false", Integer.class).intValue()); }); }
@Test void testConversionsToObject() { JsonParsers.forEachParser(jsonParser -> { assertEquals("173", jsonParser.parse("\"173\"", Object.class)); assertEquals(123, jsonParser.parse("123", Object.class)); assertEquals(true, jsonParser.parse("true", Object.class)); assertTrue(jsonParser.parse("[]", Object.class) instanceof List); assertTrue(jsonParser.parse("{}", Object.class) instanceof Map); }); }
@Test void testLazyParserSupportEscapedDoubleQuotes() { String json = "{ \"values\": [{ \"value\": \"foo\\\"bar\" }]}"; JsonParsers.forEachParser(jsonParser -> { Map<String, Object> object = jsonParser.parse(json); List<Map.Entry<String, Object>> entries = object.entrySet().stream().collect(Collectors.toList()); assertEquals(1, entries.size()); assertEquals("values", entries.get(0).getKey()); assertEquals("foo\"bar", ((List<Map<String, String>>) entries.get(0).getValue()).get(0).get("value")); }); } }
@Test void testGeneralMapDeserialization2() { JsonParsers.forEachParser(jsonParser -> { String json = new JsonSerializer().serialize(creator.createJodder()); Map<String, Object> deserialized = jsonParser.parse(json); assertEquals("Igor", deserialized.get("firstname")); assertEquals("Spasic", deserialized.get("lastname")); assertTrue(Map.class.isAssignableFrom(deserialized.get("work").getClass())); assertTrue(Map.class.isAssignableFrom(deserialized.get("home").getClass())); }); }
@Test void testEscapeAtTheEndOfLongString() { JsonParsers.forEachParser(jsonParser -> { String s = StringUtil.repeat('A', 800); String json = "\"" + s + "\\n\""; try { jsonParser.parse(json); } catch (Exception ex) { fail(ex.toString()); } }); }
@Test void testParseCatalogAsObject() { JsonParsers.forEachParser(jsonParser -> { String json = loadJSON("citm_catalog"); Catalog catalog = jsonParser.parse(json, Catalog.class); assertCatalog(catalog); }); }
@Test public void testDouble_NaN() { JsonParsers.forEachParser(jsonParser -> { String json = JsonSerializer.create().serialize(Double.NaN); assertEquals("\"NaN\"", json); Double d = jsonParser.parse(json, Double.class); assertTrue(d.isNaN()); }); }
@Test void testJsonValueContextArray2() { JsonParsers.forEachParser(jsonParser -> { Object[] array = new Object[]{new Surfer(), "two", "three"}; JsonSerializer jsonSerializer = new JsonSerializer() .withSerializer(String.class, new MyTypeJsonSerializer2()); String json = jsonSerializer.serialize(array); List<String> list = jsonParser.parse(json); assertEquals(3, list.size()); assertEquals("TWO", list.get(1)); }); }
@Test void testDeserializeWithIncludes() { JsonParsers.forEachParser(jsonParser -> { Person igor = creator.createJodder(); String json = new JsonSerializer().include("phones", "hobbies").serialize(igor); Person jsonIgor = jsonParser.parse(json, Person.class); assertEquals(2, jsonIgor.getPhones().size()); assertEquals(0, jsonIgor.getHobbies().size()); }); }
@Test void testEscapeChars() { JsonParsers.forEachParser(jsonParser -> { String json = "\"1\\\" 2\\\\ 3\\/ 4\\b 5\\f 6\\n 7\\r 8\\t\""; String str = jsonParser.parse(json); assertEquals("1\" 2\\ 3/ 4\b 5\f 6\n 7\r 8\t", str); String jsonStr = new JsonSerializer().strictStringEncoding(true).serialize(str); assertEquals(json, jsonStr); }); }
@Test void testPoint() { JsonParser.Defaults.classMetadataName = "__class"; JsonSerializer.Defaults.classMetadataName = "__class"; JsonParsers.forEachParser(jsonParser -> { String json = new JsonSerializer().serialize(new Point2D.Float(1.0f, 2.0f)); Point2D.Float point = jsonParser.parse(json); assertEquals(1.0f, point.x, DELTA); assertEquals(2.0f, point.y, DELTA); }); }
@Test void testDeserializeInterfaces2() { JsonParsers.forEachParser(jsonParser -> { Hero superman = creator.createSuperman(); String json = new JsonSerializer().include("powers").withClassMetadata(true).serialize(superman); Hero jsonSuperMan = jsonParser.withClassMetadata(true).parse(json, Hero.class); assertNotNull(jsonSuperMan); assertEquals(4, jsonSuperMan.getPowers().size()); assertHeroHasSuperPowers(jsonSuperMan); }); }
@Test void testDeserializeInterfaces() { JsonParsers.forEachParser(jsonParser -> { Hero superman = creator.createSuperman(); String json = new JsonSerializer().include("powers").setClassMetadataName("class").serialize(superman); Hero jsonSuperMan = jsonParser.setClassMetadataName("class").parse(json, Hero.class); assertNotNull(jsonSuperMan); assertEquals(4, jsonSuperMan.getPowers().size()); assertHeroHasSuperPowers(jsonSuperMan); }); }
@Test void testSubClassDeserialize() { JsonParsers.forEachParser(jsonParser -> { Employee dilbert = creator.createDilbert(); String json = new JsonSerializer().include("phones", "hobbies").serialize(dilbert); Person jsonDilbert = jsonParser.parse(json, Employee.class); assertNotNull(jsonDilbert); assertTrue(jsonDilbert instanceof Employee); assertEquals(dilbert.getCompany(), ((Employee) jsonDilbert).getCompany()); }); }