### Question:
JsonUtils { public static AwsJsonReader getJsonReader(Reader in) { return FACTORY.getJsonReader(in); }  @Deprecated static void setJsonEngine(JsonEngine jsonEngine); static AwsJsonReader getJsonReader(Reader in); static AwsJsonWriter getJsonWriter(Writer out); @SuppressWarnings("unchecked") static Map<String, String> jsonToMap(Reader in); @SuppressWarnings("unchecked") static Map<String, String> jsonToMap(String json); @SuppressWarnings("unchecked") static Map<String, String> jsonToStringMapWithList(Reader in); static String mapToString(Map<String, String> map);  }### Answer:
@Test public void testJsonReader() throws IOException { AwsJsonReader reader = JsonUtils.getJsonReader(new StringReader(JSON_STRING)); reader.beginObject(); assertTrue("has properties", reader.hasNext()); while (reader.hasNext()) { String name = reader.nextName(); if (name.equals("string")) { assertTrue("VALUE_STRING", AwsJsonToken.VALUE_STRING == reader.peek()); assertEquals("string value", "string", reader.nextString()); } else if (name.equals("long")) { assertTrue("VALUE_NUMBER", AwsJsonToken.VALUE_NUMBER == reader.peek()); assertEquals("long value", "123", reader.nextString()); } else if (name.equals("double")) { assertTrue("VALUE_NUMBER", AwsJsonToken.VALUE_NUMBER == reader.peek()); assertEquals("double value", "123.45", reader.nextString()); } else if (name.equals("null")) { assertTrue("VALUE_NULL", AwsJsonToken.VALUE_NULL == reader.peek()); assertNull("null value", reader.nextString()); } else if (name.equals("true")) { assertTrue("VALUE_BOOLEAN", AwsJsonToken.VALUE_BOOLEAN == reader.peek()); assertEquals("true value", "true", reader.nextString()); } else if (name.equals("false")) { assertTrue("VALUE_BOOLEAN", AwsJsonToken.VALUE_BOOLEAN == reader.peek()); assertEquals("false value", "false", reader.nextString()); } else if (name.equals("encoding")) { assertTrue("VALUE_STRING", AwsJsonToken.VALUE_STRING == reader.peek()); assertEquals("encoding", "Chloë", reader.nextString()); } else if (name.equals("array")) { assertTrue("BEGIN_ARRAY", AwsJsonToken.BEGIN_ARRAY == reader.peek()); reader.beginArray(); assertTrue("has next", reader.hasNext()); assertEquals("string value", "string", reader.nextString()); assertEquals("long value", "123", reader.nextString()); assertEquals("double value", "123.45", reader.nextString()); assertNull("null value", reader.nextString()); assertEquals("true value", "true", reader.nextString()); assertEquals("false value", "false", reader.nextString()); reader.endArray(); } else if (name.equals("object")) { assertTrue("BEGIN_OBJECT", AwsJsonToken.BEGIN_OBJECT == reader.peek()); reader.beginObject(); assertFalse("empty object", reader.hasNext()); reader.endObject(); } else { fail("should not reach here"); } } reader.endObject(); }