Как преобразовать jsonString в JSONObject в Java?
У меня есть переменная типа String с названием jsonString
:
{"phonetype":"N95","cat":"WP"}
Теперь я хочу преобразовать её в объект JSON. Я искал информацию в Google, но не нашёл ожидаемых ответов! Как мне это сделать?
5 ответ(ов)
Для тех, кто все еще ищет ответ:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
Этот код использует JSONParser
для разбора строки stringToParse
, что позволяет получить объект JSONObject
. Убедитесь, что у вас подключена библиотека, поддерживающая парсинг JSON, например, json-simple.
В Java 7 для работы с JSON вы можете использовать библиотеку javax.json
. Вот пример, как можно прочитать JSON-строку и преобразовать её в объект JsonObject
. Предположим, что у вас уже есть JSON в виде строки, сохранённой в переменной TEXT
.
Вот решение:
import javax.json.Json;
import javax.json.JsonObject;
import java.io.StringReader;
public class JsonExample {
public static void main(String[] args) {
String TEXT = "{\"key\":\"value\"}"; // Пример строки JSON
// Чтение JSON-строки и преобразование в JsonObject
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject();
// Выводим значение по ключу
System.out.println(body.getString("key")); // Вывод: value
}
}
В этом примере используется StringReader
для создания объекта, который читает из строки, и метод Json.createReader()
для создания JSON-ридера. После этого вы можете получить доступ к элементам JSON-объекта, используя соответствующие методы, как getString()
.
Не забудьте добавить зависимости для javax.json
в ваш проект, если работаете с Java EE или Java SE, чтобы убедиться, что библиотека доступна.
Чтобы преобразовать String
в JSONObject
, вам нужно просто передать экземпляр String
в конструктор JSONObject
.
Пример:
JSONObject jsonObj = new JSONObject("ваша строка");
Для преобразования строки JSON в объект с использованием библиотеки Jackson
и пакета com.fasterxml.jackson.databind
, вы можете использовать следующий код. Допустим, ваша JSON-строка выглядит так: jsonString = {"phonetype":"N95","cat":"WP"}
.
Вот пример простого кода:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* Простой пример кода
*/
public class JsonExample {
public static void main(String[] args) {
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
try {
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString); // Преобразуем строку JSON в JsonNode
String phoneType = node.get("phonetype").asText(); // Получаем значение phonetype
String cat = node.get("cat").asText(); // Получаем значение cat
System.out.println("Phone Type: " + phoneType);
System.out.println("Category: " + cat);
} catch (Exception e) {
e.printStackTrace(); // Обработка исключений
}
}
}
Этот код создает объект ObjectMapper
, который используется для разбора JSON-строки в объект JsonNode
. Затем вы можете получить значения по ключам phonetype
и cat
с помощью метода get()
, а затем использовать asText()
для получения текстовых значений. Не забудьте обернуть ваш код в блок try-catch
, чтобы правильно обрабатывать возможные исключения.
Я предпочитаю использовать библиотеку google-gson для работы с JSON, и именно поэтому мне не нужно взаимодействовать с JSONObject напрямую.
В этом случае я создаю класс, соответствующий свойствам вашего JSON-объекта:
class Phone {
public String phonetype;
public String cat;
}
Как это работает:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
Gson gson = new Gson();
Phone fooFromJson = gson.fromJson(jsonString, Phone.class);
Тем не менее, мне кажется, что ваш вопрос скорее о том, как получить объект JSONObject из JSON-строки.
Я посмотрел на API google-json и не нашел ничего столь же простого, как в API org.json, который, вероятно, лучше подойдет для ваших нужд, если вы действительно хотите использовать "голый" JSONObject.
Вот ссылка на документацию: JSONObject API.
С помощью org.json.JSONArray (другого абсолютно отличного API) вы можете сделать что-то вроде этого:
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));
На мой взгляд, хорошая сторона google-gson заключается в том, что вам не нужно работать с JSONObject. Вы просто получаете JSON, передаете класс, в который хотите десериализовать, и ваши атрибуты класса будут сопоставлены с полями JSON. Однако у каждого свои требования; возможно, вам не позволительно иметь заранее сопоставленные классы при десериализации, потому что данные могут быть слишком динамичными на этапе генерации JSON. В таком случае просто используйте библиотеку json.org.
Как разобрать JSON в Java
Преобразование 'ArrayList<String>' в 'String[]' в Java
Как создать обобщённый массив в Java?
Как объявить массив в одну строку?
Как преобразовать строку Java в byte[]?