15 ответов:
С помощью орг.json библиотека:
JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
для тех, кто все еще ищет ответ:
JSONParser parser = new JSONParser(); JSONObject json = (JSONObject) parser.parse(stringToParse);
можно использовать
google-gson. Подробности:Примеры Объекта
class BagOfPrimitives { private int value1 = 1; private String value2 = "abc"; private transient int value3 = 3; BagOfPrimitives() { // no-args constructor } }(сериализации)
BagOfPrimitives obj = new BagOfPrimitives(); Gson gson = new Gson(); String json = gson.toJson(obj); ==> json is {"value1":1,"value2":"abc"}обратите внимание, что вы не можете сериализовать объекты с циклическими ссылками, поскольку это приведет к бесконечной рекурсии.
(десериализации)
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class); ==> obj2 is just like objдругой пример для Gson:
Gson легко узнать и реализовать, вам нужно знаю два метода:
- > toJson () - преобразование объекта java в формат JSON
- > fromJson () - конвертировать JSON в объект java
import com.google.gson.Gson; public class TestObjectToJson { private int data1 = 100; private String data2 = "hello"; public static void main(String[] args) { TestObjectToJson obj = new TestObjectToJson(); Gson gson = new Gson(); //convert java object to JSON format String json = gson.toJson(obj); System.out.println(json); } }выход
{"data1":100,"data2":"hello"}ресурсы:
существуют различные сериализаторы Java JSON и десериализаторы, связанные с Домашняя страница JSON.
на момент написания этой статьи, есть эти 20:
- org.json
- org.json.me
- Джексон JSON процессор
- Json-lib
- JSON Tools
- json-простой
- Stringtree
- Сохо
- Restlet
- сбросить
- в JSON-библиотеки тегов
- XStream
- JsonMarshaller
- Flexjson
- Jon tools
- google-gson
- Арго
- Pivot
- jsonij
- fastjson
...но, конечно, список может измениться.
Java 7 solution
import javax.json.*; ... String TEXT; JsonObject body = Json.createReader(new StringReader(TEXT)).readObject();
мне нравится использовать google-gson для этого, и это именно потому, что мне не нужно работать с 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 json, который является вероятно, что вы хотите использовать, если вы так сильно нуждаетесь в использовании barebones JSONObject.
http://www.json.org/javadoc/org/json/JSONObject.html
С орг.формат JSON.JSONObject (другой совершенно другой API), если вы хотите сделать что-то вроде...
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}"); System.out.println(jsonObject.getString("phonetype"));Я думаю, что красота google-gson заключается в том, что вам не нужно иметь дело с JSONObject. Вы просто берете json, передаете класс, в который хотите десериализоваться, и ваши атрибуты класса будет соответствовать JSON, но опять же, у каждого есть свои собственные требования, возможно, вы не можете позволить себе роскошь иметь предварительно сопоставленные классы на стороне десериализации, потому что все может быть слишком динамичным на стороне генерации JSON. В этом случае просто используйте json.org.
необходимо импортировать организацию.json
JSONObject jsonObj = null; try { jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}"); } catch (JSONException e) { e.printStackTrace(); }
преобразование
StringнаJSONObjectвам просто нужно пройтиStringэкземпляр в конструкторJSONObject.например:
JSONObject jsonObj = new JSONObject("your string");
Если вы используете http://json-lib.sourceforge.net (чистый.научная фантастика.формат JSON.JSONObject)
это довольно легко:
String myJsonString; JSONObject json = JSONObject.fromObject(myJsonString);или
JSONObject json = JSONSerializer.toJSON(myJsonString);получить значения, то с формат JSON.getString (param), json.getInt (param) и так далее.
используйте JsonNode из fasterxml для общего анализа Json. Он внутренне создает карту ключевого значения для всех входных данных.
пример:
private void test(@RequestBody JsonNode node)входной строки :
{"a":"b","c":"d"}
для преобразования строки в json и жало, как json. {"phonetype":"N95","cat":"WP"}
String Data=response.getEntity().getText().toString(); // reading the string value JSONObject json = (JSONObject) new JSONParser().parse(Data); String x=(String) json.get("phonetype"); System.out.println("Check Data"+x); String y=(String) json.get("cat"); System.out.println("Check Data"+y);
для установки JSON одного объекта в список т. е.
"locations":{ }на
List<Location>использовать
ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);Джексон.mapper-asl-1.9.7.банку
обратите внимание, что GSON с десериализацией интерфейса приведет к исключению, как показано ниже.
"java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."при десериализации; GSON не знает, какой объект должен быть интантирован для этого интерфейса.
это как-то решается здесь.
FlexJSON это решение по своей сути. в то время как сериализация времени он добавляет имя класса как часть json, как показано ниже.{ "HTTPStatus": "OK", "class": "com.XXX.YYY.HTTPViewResponse", "code": null, "outputContext": { "class": "com.XXX.YYY.ZZZ.OutputSuccessContext", "eligible": true } }Так что JSON будет cumber некоторые; но вы не делаете нужно написать
InstanceCreatorчто требуется в GSON.
нет необходимости использовать какую-либо внешнюю библиотеку.
вы можете использовать этот класс :) (обрабатывает даже списки, вложенные списки и json)
public class Utility { public static Map<String, Object> jsonToMap(Object json) throws JSONException { if(json instanceof JSONObject) return _jsonToMap_((JSONObject)json) ; else if (json instanceof String) { JSONObject jsonObject = new JSONObject((String)json) ; return _jsonToMap_(jsonObject) ; } return null ; } private static Map<String, Object> _jsonToMap_(JSONObject json) throws JSONException { Map<String, Object> retMap = new HashMap<String, Object>(); if(json != JSONObject.NULL) { retMap = toMap(json); } return retMap; } private static Map<String, Object> toMap(JSONObject object) throws JSONException { Map<String, Object> map = new HashMap<String, Object>(); Iterator<String> keysItr = object.keys(); while(keysItr.hasNext()) { String key = keysItr.next(); Object value = object.get(key); if(value instanceof JSONArray) { value = toList((JSONArray) value); } else if(value instanceof JSONObject) { value = toMap((JSONObject) value); } map.put(key, value); } return map; } public static List<Object> toList(JSONArray array) throws JSONException { List<Object> list = new ArrayList<Object>(); for(int i = 0; i < array.length(); i++) { Object value = array.get(i); if(value instanceof JSONArray) { value = toList((JSONArray) value); } else if(value instanceof JSONObject) { value = toMap((JSONObject) value); } list.add(value); } return list; } }
преобразовать ваш строка JSON в hashmap используйте этот :
HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(
лучше пойти с более простым способом с помощью
org.jsonlib. Вобще очень простой подход, как показано ниже:JSONObject obj = new JSONObject(); obj.put("phonetype", "N95"); obj.put("cat", "WP");теперь
obj- это преобразованныйJSONObjectформа вашей соответствующей строки. Это в случае если у вас есть пар имя-значение.для строки вы можете напрямую перейти к конструктору
JSONObject. Если это будет действительнымjson String, то ладно, в противном случае он будет бросать исключение.
Comments