«1. Обзор

В этом кратком руководстве мы покажем, как преобразовать BufferedReader в JSONObject, используя два разных подхода.

2. Зависимость

Прежде чем мы начнем, нам нужно добавить зависимость org.json в наш pom.xml:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20200518</version>
</dependency>

3. JSONTokener

Последняя версия библиотеки org.json поставляется с конструктором JSONTokener. Он напрямую принимает Reader в качестве параметра.

Итак, давайте преобразуем BufferedReader в JSONObject, используя это:

@Test
public void givenValidJson_whenUsingBufferedReader_thenJSONTokenerConverts() {
    byte[] b = "{ \"name\" : \"John\", \"age\" : 18 }".getBytes(StandardCharsets.UTF_8);
    InputStream is = new ByteArrayInputStream(b);
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
    JSONTokener tokener = new JSONTokener(bufferedReader);
    JSONObject json = new JSONObject(tokener);

    assertNotNull(json);
    assertEquals("John", json.get("name"));
    assertEquals(18, json.get("age"));
}

4. Первое преобразование в строку

Теперь давайте рассмотрим другой подход для получения JSONObject путем преобразования BufferedReader в строку.

Этот подход можно использовать при работе со старой версией org.json:

@Test
public void givenValidJson_whenUsingString_thenJSONObjectConverts()
  throws IOException {
    // ... retrieve BufferedReader<br />
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        sb.append(line);
    }
    JSONObject json = new JSONObject(sb.toString());

    // ... same checks as before
}

Здесь мы преобразуем BufferedReader в строку, а затем используем конструктор JSONObject для преобразования строки в объект JSON.

5. Заключение

В этой статье мы рассмотрели два разных способа преобразования BufferedReader в JSONObject на простых примерах. Несомненно, последняя версия org.json обеспечивает аккуратный и чистый способ преобразования BufferedReader в JSONObject с меньшим количеством строк кода.

Как всегда, полный исходный код примера доступен на GitHub.

«

As always, the full source code of the example is available over on GitHub.