Преобразовать строку 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?

14 ответов

Решение

Я использовал несколько из них, и мой любимый,

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"));

Самый простой вариант - Джексон:

MyObject ob = new ObjectMapper().readValue(jsonString, MyObject.class);

Существуют и другие подобные простые в использовании библиотеки (Gson уже упоминался); но некоторые варианты более трудоемки, например, оригинальная библиотека org.json, которая требует от вас создания промежуточного "JSONObject", даже если он вам не нужен.

GSON - хороший вариант для преобразования объекта Java в объект JSON и наоборот.
Это инструмент, предоставляемый Google.

для преобразования json в объект java используйте: fromJson(jsonObject,javaclassname.class)
для преобразования объекта Java в объект JSON используйте: toJson(javaObject)
и отдых будет сделан автоматически

Для получения дополнительной информации и для загрузки

Вы можете сделать это легко с помощью 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/.

У вас есть много парсеров 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.

Официальный сайт 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), Strings или Arrays.

Обратный процесс довольно прост, я имею в виду преобразование строки в объект / массив json.

String myString;

JSONObject obj = new JSONObject(myString);

JSONArray array = new JSONArray(myString);

Для правильного разбора вам просто нужно знать, анализируете ли вы массив или объект.

Используйте библиотеку 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

Как уже говорилось, довольно простой способ сделать это с помощью JSON.simple, как показано ниже

import org.json.JSONObject;

String someJsonString = "{name:"MyNode", width:200, height:100}";
JSONObject jsonObj = new JSONObject(someJsonString);

А затем используйте jsonObj для работы с JSON Object. например, jsonObj.get("name");

Согласно приведенной ниже ссылке, JSON.simple демонстрирует постоянную эффективность как для маленьких, так и для больших файлов JSON.

http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

Это старый вопрос, и 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/ которые сравнивают.

JSON IO - это самый простой способ преобразования строки JSON или входного потока JSON в объект Java

Строка в объект Java
Object obj = JsonReader.jsonToJava("[\"Hello, World\"]");

https://code.google.com/p/json-io/

Джексон для больших файлов, GSON для маленьких файлов и JSON.simple для обработки обоих.

Я написал библиотеку, которая использует json.org для анализа JSON, но на самом деле она создаст прокси интерфейса для вас. Код /JAR находится на code.google.com.

http://fixjures.googlecode.com/

Я не знаю, работает ли это на J2ME. Поскольку он использует Java Reflection для создания прокси, я думаю, что он не будет работать. Кроме того, в настоящее время у него есть жесткая зависимость от Google Collections, которую я хочу удалить, и он, вероятно, слишком тяжел для ваших нужд, но он позволяет вам взаимодействовать с данными 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");

Помимо http://www.json.org/ вы также можете реализовать свой собственный парсер, используя javacc и сопоставляя вашу личную грамматику / схему. Смотрите эту заметку в моем блоге: http://plindenbaum.blogspot.com/2008/07/parsing-json-with-javacc-my-notebook.html

Просто создайте объект Json в java со следующей строкой Json. В вашем случае

{name:"MyNode", width:200, height:100}

если выше - ваша строка Json, просто создайте объект Json с ней.

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"));
Другие вопросы по тегам