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 ...
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 ...
Antworten:
Verwenden der org.json- Bibliothek:
try {
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
Log.d("Error", err.toString());
}
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
An alle, die noch nach einer Antwort suchen:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
import org.json.simple.JSONObject
parser.parse(
und will Try-Catch oder Würfe. Wenn Sie jedoch einen hinzufügen, wird ein Unhandled exception type ParseException
Fehler oder ein NoClassDefFound-Fehler für ParseException ausgegeben, org.json.simple.parser
selbst wenn Sie in Maven- Abhängigkeiten json-simple haben und in der Bibliothek des Projekts deutlich sichtbar sind.
Sie können verwenden google-gson
. 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 leicht zu erlernen und zu implementieren. Sie müssen die folgenden zwei Methoden kennen:
-> toJson () - Konvertiert das Java-Objekt in das JSON-Format
-> fromJson () - JSON in Java-Objekt konvertieren
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:
Es gibt verschiedene Java JSON-Serializer und Deserializer, die über die JSON-Homepage verlinkt sind .
Zum jetzigen Zeitpunkt gibt es diese 22:
- JSON-Java .
- JSONUtil .
- jsonp .
- Json-lib .
- Stringtree .
- SOJO .
- json-taglib .
- Flexjson .
- Argo .
- jsonij .
- Fastjson .
- mjson .
- jjson .
- json-einfach .
- json-io .
- google-gson .
- FOSS Nova JSON .
- Mais-Konverter .
- Apache Johnzon .
- Genson .
- cookjson .
- Progbase .
... aber natürlich kann sich die Liste ändern.
Java 7-Lösung
import javax.json.*;
...
String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()
;;
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 erhalte ich ein tatsächliches JSONObject-Objekt aus einer JSON-Zeichenfolge?
Ich habe mir die Google-JSON-API angesehen und konnte nichts so einfaches finden wie die API von org.json. Dies ist wahrscheinlich das, was Sie verwenden möchten, wenn Sie ein Barebone-JSONObject so dringend benötigen.
http://www.json.org/javadoc/org/json/JSONObject.html
Mit org.json.JSONObject (eine andere völlig andere API) Wenn Sie so etwas 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 befassen müssen. Sie greifen einfach zu json, übergeben die Klasse, in die Sie deserialisieren möchten, und Ihre Klassenattribute werden mit dem JSON abgeglichen. Andererseits hat jeder seine eigenen Anforderungen. Vielleicht können Sie sich den Luxus nicht leisten, vorab zugeordnete Klassen zu haben die deserialisierende Seite, weil die Dinge auf der JSON-generierenden Seite möglicherweise zu dynamisch sind. In diesem Fall verwenden Sie einfach json.org.
String zu JSON Verwendung Jackson
mit com.fasterxml.jackson.databind
:
Angenommen, Ihre JSON-Zeichenfolge lautet wie folgt: 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();
Wenn Sie http://json-lib.sourceforge.net verwenden (net.sf.json.JSONObject)
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.
Eine Zeichenfolge in json und den Stich umzuwandeln ist wie json. {"Phonetyp": "N95", "Katze": "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);
Keine Notwendigkeit, eine externe Bibliothek zu verwenden.
Sie können diese Klasse stattdessen verwenden :) (behandelt 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;
}
}
Verwenden Sie Folgendes, um Ihre JSON-Zeichenfolge in eine Hashmap zu konvertieren :
HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(
Codehaus Jackson - Ich bin seit 2012 diese großartige API für meine RESTful-Webservice- und JUnit-Tests. Mit ihrer API können Sie:
(1) Konvertieren Sie den JSON-String in eine Java-Bean
public static String beanToJSONString(Object myJavaBean) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.writeValueAsString(myJavaBean);
}
(2) Konvertieren Sie den JSON-String in ein JSON-Objekt (JsonNode).
public static JsonNode stringToJSONObject(String jsonString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readTree(jsonString);
}
//Example:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JsonNode jsonNode = stringToJSONObject(jsonString);
Assert.assertEquals("Phonetype value not legit!", "N95", jsonNode.get("phonetype").getTextValue());
Assert.assertEquals("Cat value is tragic!", "WP", jsonNode.get("cat").getTextValue());
(3) Konvertieren Sie Java Bean in JSON String
public static Object JSONStringToBean(Class myBeanClass, String JSONString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readValue(JSONString, beanClass);
}
REFS:
JsonNode-API - Verwenden, Navigieren, Analysieren und Auswerten von Werten aus einem JsonNode-Objekt
Tutorial - Einfaches Tutorial zur Verwendung von Jackson zum Konvertieren von JSON-Zeichenfolgen in JsonNode
HINWEIS: GSON beim Deserialisieren einer Schnittstelle führt zu einer Ausnahme wie unten.
"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 intantiert werden muss.
Dies ist hier irgendwie gelöst .
Jedoch FlexJSON hat diese Lösung von Natur aus . Während der Serialisierung wird der Klassenname als Teil von json wie unten hinzugefügt.
{
"HTTPStatus": "OK",
"class": "com.XXX.YYY.HTTPViewResponse",
"code": null,
"outputContext": {
"class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
"eligible": true
}
}
Also wird JSON einige belasten; Sie müssen jedoch nicht schreiben, InstanceCreator
was in GSON erforderlich ist.
Verwenden von org.json
Wenn Sie eine Zeichenfolge mit Text im JSON-Format haben, können Sie das JSON-Objekt mithilfe der folgenden Schritte abrufen:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject(jsonString);
} catch (JSONException e) {
e.printStackTrace();
}
Nun können Sie auf den Phonetyp zugreifen
Sysout.out.println(jsonObject.getString("phonetype"));
Zum Setzen von json single object auf list dh
"locations":{
}
in zu List<Location>
verwenden
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
jackson.mapper-asl-1.9.7.jar
Konvertieren eines Strings in ein Json-Objekt mithilfe von org.json.simple.JSONObject
private static JSONObject createJSONObject(String jsonString){
JSONObject jsonObject=new JSONObject();
JSONParser jsonParser=new JSONParser();
if ((jsonString != null) && !(jsonString.isEmpty())) {
try {
jsonObject=(JSONObject) jsonParser.parse(jsonString);
} catch (org.json.simple.parser.ParseException e) {
e.printStackTrace();
}
}
return jsonObject;
}
Besser Gehen Sie mit org.json
lib auf einfachere Weise . Gehen Sie einfach wie folgt vor:
JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");
Jetzt obj
ist Ihre konvertierte JSONObject
Form Ihres jeweiligen Strings. Dies ist der Fall, wenn Sie Name-Wert-Paare haben.
Für eine Zeichenfolge können Sie direkt an den Konstruktor von übergeben JSONObject
. Wenn es gültig ist json String
, dann okay, sonst wird eine Ausnahme ausgelöst.
user.put("email", "someemail@mail.com")
Wenn Sie buchstäblich das tun, was Sie geschrieben haben, wird eine unbehandelte Ausnahme ausgelöst.
try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}