Как преобразовать jsonString в JSONObject в Java

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

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

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

15 ответов


С помощью org.в 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"}

ресурсы:

Главная Страница Проекта Google Gson

Руководство Пользователя Gson

пример


существуют различные сериализаторы Java JSON и десериализаторы, связанные с Домашняя страница JSON.

на момент написания этой статьи, есть эти 20:

...но, конечно, список может измениться.


решение Java 7

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.json lib. Вобще очень простой подход, как показано ниже:

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

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

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