it-swarm.com.de

Wie konvertiert man jsonString nach JSONObject in Java

Ich habe eine String-Variable namens jsonString:

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

Jetzt möchte ich es in JSON Object konvertieren. Ich habe mehr bei Google gesucht, aber keine erwarteten Antworten erhalten ...

371

Verwendung der org.json Bibliothek:

try {
     JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
     Log.d("Error", err.toString());
}
607
dogbane

Für alle, die noch eine Antwort suchen:

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
142
Mappan

Sie können google-gson verwenden. Einzelheiten:

Objektbeispiele

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  BagOfPrimitives() {
    // no-args constructor
  }
}

(Serialisierung)

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); 
==> json is {"value1":1,"value2":"abc"}

Beachten Sie, dass Sie Objekte mit Zirkelverweisen nicht serialisieren können, da dies zu einer unendlichen Rekursion führt.

(Deserialisierung)

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);  
==> obj2 is just like obj

Ein weiteres Beispiel für Gson:

Gson ist einfach zu erlernen und zu implementieren. Sie müssen die folgenden beiden Methoden kennen:

-> toJson () - konvertiert Java -Objekt in das JSON-Format

-> fromJson () - konvertiert JSON in ein Java Objekt

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

}

Ausgabe

{"data1":100,"data2":"hello"}

Ressourcen:

Google Gson Project-Startseite

Gson User Guide

Beispiel

42
kamaci

Es gibt verschiedene Java JSON-Serializer und -Deserializer, die über JSON-Homepage verknüpft sind.

Zum jetzigen Zeitpunkt gibt es diese 22:

... aber natürlich kann sich die Liste ändern.

33
T.J. Crowder

Java 7-Lösung

import javax.json.*;

...

String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()

;

24
RSG

Ich benutze dafür gerne Google-Gson und das liegt genau daran, dass ich nicht direkt mit JSONObject arbeiten muss.

In diesem Fall hätte ich eine Klasse, die den Eigenschaften Ihres JSON-Objekts entspricht

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

Ich denke jedoch, dass Ihre Frage eher wie folgt lautet: Wie kann ich mit einem tatsächlichen JSONObject-Objekt aus einem JSON-String enden.

Ich habe mir die google-json-API angesehen und konnte nichts so einfaches wie die org.json-API finden. Dies ist wahrscheinlich das, was Sie verwenden möchten, wenn Sie dringend ein Barebones-JSONObject benötigen.

http://www.json.org/javadoc/org/json/JSONObject.html

Mit org.json.JSONObject (eine andere völlig andere API) Wenn Sie etwas tun möchten wie ...

JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));

Ich denke, das Schöne an Google-Gson ist, dass Sie sich nicht mit JSONObject auseinandersetzen müssen. Sie greifen einfach auf JSON zu, übergeben die Klasse, in die deserialisiert werden soll, und Ihre Klassenattribute werden an JSON angepasst. Andererseits hat jeder seine eigenen Anforderungen. Vielleicht können Sie sich den Luxus nicht leisten, vorab zugeordnete Klassen zu haben die deserialisierende Seite, da die Dinge auf der JSON-Generierungsseite möglicherweise zu dynamisch sind. In diesem Fall benutzen Sie einfach json.org.

10
Gubatron

Um String in JSONObject zu konvertieren, müssen Sie nur die String -Instanz in den Konstruktor von JSONObject übergeben.

Z.B:

JSONObject jsonObj = new JSONObject("your string");
10
Charu

sie müssen org.json importieren

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

String zu JSON mit Jackson mit com.fasterxml.jackson.databind:

Angenommen, Ihre json-Zeichenfolge stellt Folgendes dar: jsonString = {"phonetype": "N95", "cat": "WP"}

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
 * Simple code exmpl
 */
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString);
String phoneType = node.get("phonetype").asText();
String cat = node.get("cat").asText();
6
Yugerten

Verwenden Sie JsonNode von fasterxml für das generische Json-Parsing. Es wird intern eine Zuordnung des Schlüsselwerts für alle Eingaben erstellt.

Beispiel:

private void test(@RequestBody JsonNode node)

eingabezeichenfolge:

{"a":"b","c":"d"}
3
Vishnu

Wenn Sie http://json-lib.sourceforge.net (net.sf.json.JSONObject) verwenden

es ist ziemlich einfach:

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

oder

JSONObject json = JSONSerializer.toJSON(myJsonString);

holen Sie sich die Werte dann mit json.getString (param), json.getInt (param) und so weiter.

3
Thero

Sie müssen keine externe Bibliothek verwenden.

Sie können stattdessen diese Klasse verwenden:) (verarbeitet gerade Listen, verschachtelte Listen und 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;
    }
}

So konvertieren Sie Ihre JSON-Zeichenfolge in Hashmap Verwenden Sie Folgendes:

HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(
2
Natesh bhat

Einen String in Json umzuwandeln und der Sting ist wie 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);
2

Mit org.json

Wenn Sie einen String haben, der Text im JSON-Format enthält, können Sie das JSON-Objekt folgendermaßen abrufen:

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

Nun zum Phonetyp

Sysout.out.println(jsonObject.getString("phonetype"));
0
Azhar Zafar

Beachten Sie, dass GSON beim Deserialisieren einer Schnittstelle zu Ausnahmen wie unten führt.

"Java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."

Während deserialisieren; GSON weiß nicht, welches Objekt für diese Schnittstelle intantiiert werden muss.

Das ist irgendwie gelöst hier .

Allerdings hat FlexJSON diese Lösung inhärent. Während der Serialisierung wird der Klassenname wie unten gezeigt als Teil von json hinzugefügt.

{
    "HTTPStatus": "OK",
    "class": "com.XXX.YYY.HTTPViewResponse",
    "code": null,
    "outputContext": {
        "class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
        "eligible": true
    }
}

So wird JSON einige belasten; Sie müssen jedoch nicht InstanceCreator schreiben, was in GSON erforderlich ist.

0

Zum Setzen von json single object auf list ie

"locations":{

}

bei List<Location>

verwenden

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

jackson.mapper-asl-1.9.7.jar

0
user3012570