Как конвертировать jsonString в JSONObject в Java - PullRequest
362 голосов
/ 09 марта 2011

У меня есть строковая переменная с именем jsonString:

{"phonetype":"N95","cat":"WP"}

Теперь я хочу преобразовать ее в объект JSON.Я искал больше в Google, но не получил ожидаемых ответов ...

Ответы [ 17 ]

3 голосов
/ 03 апреля 2013

Если вы используете http://json -lib.sourceforge.net (Net.sf.json.JSONObject)

это довольно легко:

String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);

или

JSONObject json = JSONSerializer.toJSON(myJsonString);

получить значения затем с json.getString (param), json.getInt (param) и т. д.

2 голосов
/ 01 июля 2018

Нет необходимости использовать какую-либо внешнюю библиотеку.

Вместо этого можно использовать этот класс:) (обрабатывает четные списки, вложенные списки и 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(
2 голосов
/ 10 октября 2013

Чтобы преобразовать строку в JSON и жало, как JSON. {"тип телефона": "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);
0 голосов
/ 08 марта 2019

Использование org.json

Если у вас есть строка, содержащая текст в формате JSON, вы можете получить JSON Object, выполнив следующие действия:

String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
    try {
        jsonObj = new JSONObject(jsonString);
    } catch (JSONException e) {
        e.printStackTrace();
    }

Теперь для доступа к телефонному типу

Sysout.out.println(jsonObject.getString("phonetype"));
0 голосов
/ 18 ноября 2016

Обратите внимание, что 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 будет немного перегружен;но вам не нужно писать InstanceCreator, что требуется в GSON.

0 голосов
/ 11 ноября 2014

Better Go с более простым способом, используя org.json lib. Просто сделайте очень простой подход, как показано ниже:

JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");

Теперь obj - это ваша конвертированная JSONObject форма вашей соответствующей строки. Это в случае, если у вас есть пары имя-значение.

Для строки вы можете напрямую перейти к конструктору JSONObject. Если это будет действительный json String, тогда хорошо, в противном случае он выдаст исключение.

0 голосов
/ 20 ноября 2013

Для установки одного объекта JSON в список т.е.

"locations":{

}

в List<Location>

использовать

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

jackson.mapper-ASL-1.9.7.jar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...