Преобразование строки JSON в объект в Java ME?
Есть ли способ в Java/J2ME для преобразования строки, например:
{name:"MyNode", width:200, height:100}
для внутреннего представления объекта одного и того же в одной строке кода?
Поскольку текущий метод слишком утомительный:
Object n = create("new");
setString(p, "name", "MyNode");
setInteger(p, "width", 200);
setInteger(p, "height", 100);
Может быть, библиотека JSON?
Ответы
Ответ 1
Я использовал несколько из них, и мой любимый,
http://code.google.com/p/json-simple/
Библиотека очень маленькая, поэтому она идеально подходит для J2ME.
Вы можете разобрать JSON на объект Java в одной строке, например,
JSONObject json = (JSONObject)new JSONParser().parse("{\"name\":\"MyNode\", \"width\":200, \"height\":100}");
System.out.println("name=" + json.get("name"));
System.out.println("width=" + json.get("width"));
Ответ 2
Самый простой вариант - Jackson:
MyObject ob = new ObjectMapper().readValue(jsonString, MyObject.class);
Существуют и другие аналогичные простые в использовании библиотеки (уже упоминался Gson); но некоторые варианты более трудоемки, например, оригинальная библиотека org.json, которая требует от вас создания промежуточного "JSONObject", даже если вам это не нужно.
Ответ 3
GSON - хороший вариант для преобразования java-объекта в объект json и наоборот.
Это инструмент, предоставляемый google.
для преобразования json в использование объекта java: fromJson(jsonObject,javaclassname.class)
для преобразования объекта java в json-объект: toJson(javaObject)
и отдых будет выполнен автоматически
Подробнее информация и для загрузки
Ответ 4
Вы можете сделать это легко с помощью Google GSON.
Скажем, у вас есть класс User с поля user, width и height, и вы хотите преобразовать следующую строку json в объект User.
{"name":"MyNode", "width":200, "height":100}
Вы можете легко сделать это, без необходимости бросать (сохраняя комментарий nimcap в уме;)), со следующим кодом:
Gson gson = new Gson();
final User user = gson.fromJson(jsonString, User.class);
Где jsonString - указанная выше строка JSON.
За дополнительной информацией обратитесь к https://code.google.com/p/google-gson/
Ответ 5
У вас есть много JSON-парсеров для Java:
-
JSONObject.java
JSONObject - это неупорядоченный набор пар имя/значение. Его внешняя форма - это строка, завернутая в фигурные скобки с двоеточиями между именами и значениями и запятыми между значениями и именами. Внутренняя форма - это объект, имеющий методы get() и opt() для доступа к значениям по имени и методы put() для добавления или замены значений по имени. Значения могут быть любыми из следующих типов: Boolean, JSONArray, JSONObject, Number и String или объект JSONObject.NULL.
-
JSONArray.java
JSONArray - упорядоченная последовательность значений. Его внешняя форма - это строка, заключенная в квадратные скобки с запятыми между значениями. Внутренняя форма - это объект, имеющий методы get() и opt() для доступа к значениям по индексу и методы put() для добавления или замены значений. Значения могут быть любыми из следующих типов: Boolean, JSONArray, JSONObject, Number и String или объект JSONObject.NULL.
-
JSONStringer.java
JSONStringer - это инструмент для быстрого создания текста JSON.
-
JSONWriter.java
JSONWriter - это инструмент для быстрой записи текста JSON в потоки.
-
JSONTokener.java
JSONTokener берет исходную строку и извлекает из нее символы и токены. Он используется конструкторами JSONObject и JSONArray для разбора исходных строк JSON.
-
JSONException.java
Исключение JSONException возникает при обнаружении синтаксиса или процедурной ошибки.
-
JSONString.java
JSONString - это интерфейс, который позволяет классам реализовывать сериализацию JSON.
Ответ 6
Официальный сайт JSON, на котором вы должны посмотреть. Он предоставляет различные библиотеки, которые можно использовать с Java, я лично использовал этот, JSON-lib, который является реализацией работы в сайт, поэтому на этой странице он имеет точно такие же методы класса и т.д..
Если вы нажмете на html-ссылки, вы найдете все, что захотите.
Короче:
чтобы создать json-объект и json-массив, код:
JSONObject obj = new JSONObject();
obj.put("variable1", o1);
obj.put("variable2", o2);
JSONArray array = new JSONArray();
array.put(obj);
o1, o2, могут быть примитивными типами (long, int, boolean), строками или массивами.
Обратный процесс довольно прост, я имею в виду преобразование строки в json object/array.
String myString;
JSONObject obj = new JSONObject(myString);
JSONArray array = new JSONArray(myString);
Для правильного анализа вы просто должны знать, анализируете ли вы массив или объект.
Ответ 7
Используйте эту библиотеку google GSON для этого
public static <T> T getObject(final String jsonString, final Class<T> objectClass) {
Gson gson = new Gson();
return gson.fromJson(jsonString, objectClass);
}
http://iandjava.blogspot.in/2014/01/java-object-to-json-and-json-to-java.html
Ответ 8
Как уже было сказано, довольно простой способ сделать это с помощью JSON.simple, как показано ниже
import org.json.JSONObject;
String someJsonString = "{name:"MyNode", width:200, height:100}";
JSONObject jsonObj = new JSONObject(someJsonString);
И затем используйте jsonObj для работы с объектом JSON. например jsonObj.get( "name" );
В соответствии с приведенной ниже ссылкой JSON.simple демонстрирует постоянную эффективность как для небольших, так и для больших файлов JSON.
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
Ответ 9
JSON IO - самый простой способ преобразования строки JSON или входного потока JSON в объект Java
Строка для объекта Java
Object obj = JsonReader.jsonToJava("[\"Hello, World\"]");
https://code.google.com/p/json-io/
Ответ 10
Это старый вопрос, и json-simple (https://code.google.com/p/json-simple/) может быть хорошим решением в то время, но, пожалуйста, подумайте, что проект похоже, не активен какое-то время!
Я предлагаю Gson, который теперь размещен по адресу: https://github.com/google/gson
Если производительность вашей проблемы, вы можете взглянуть на некоторые тесты http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/, которые сравниваются.
Ответ 11
Помимо www.json.org вы также можете реализовать свой собственный синтаксический анализатор, используя javacc и сопоставляя свою персональную грамматику/схемы.
Смотрите эту заметку в своем блоге: http://plindenbaum.blogspot.com/2008/07/parsing-json-with-javacc-my-notebook.html
Ответ 12
Я написал библиотеку, которая использует json.org для разбора JSON, но фактически создаст для вас прокси-интерфейс. Код /JAR находится на code.google.com.
http://fixjures.googlecode.com/
Я не знаю, работает ли он на J2ME. Поскольку он использует Java Reflection для создания прокси, я думаю, что это не сработает. Кроме того, в настоящее время он сильно зависит от Коллекций Google, которые я хочу удалить, и, вероятно, слишком тяжелый для ваших нужд, но он позволяет вам взаимодействовать с вашими данными JSON так, как вы ищите:
interface Foo {
String getName();
int getWidth();
int getHeight();
}
Foo myFoo = Fixjure.of(Foo.class).from(JSONSource.newJsonString("{ name : \"foo name\" }")).create();
String name = myFoo.getName(); // name now .equals("foo name");
Ответ 13
Джексон для больших файлов GSON для небольших файлов и JSON.simple для обработки обоих.
Ответ 14
Просто создайте объект Json в java со следующей строкой Json. В вашем случае
{name:"MyNode", width:200, height:100}
если выше ваша строка Json, просто создайте с ним Json Object.
JsonString ="{name:"MyNode", width:200, height:100}";
JSONObject yourJsonObject = new JSONObject(JsonString);
System.out.println("name=" + yourJsonObject.getString("name"));
System.out.println("width=" + yourJsonObject.getString("width"));