Dize değişkeni adlı jsonString
:
{"phonetype":"N95","cat":"WP"}
Şimdi bunu JSON Object'e dönüştürmek istiyorum. Google'da daha fazla arama yaptım ancak beklenen cevapları alamadım ...
Dize değişkeni adlı jsonString
:
{"phonetype":"N95","cat":"WP"}
Şimdi bunu JSON Object'e dönüştürmek istiyorum. Google'da daha fazla arama yaptım ancak beklenen cevapları alamadım ...
Yanıtlar:
Org.json kütüphanesini kullanma :
try {
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
Log.d("Error", err.toString());
}
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
Hala bir cevap arayan herkese:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
import org.json.simple.JSONObject
parser.parse(
ve try-catch veya atar ister. Ancak bunlardan birini eklediğinizde , Maven bağımlılıklarında json-basit ve projenin kütüphanesinde açıkça görülebiliyor olsa bile Unhandled exception type ParseException
ParseException için bir hata veya NoClassDefFound hatası verir org.json.simple.parser
.
Kullanabilirsiniz google-gson
. Detaylar:
Nesne Örnekleri
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3;
BagOfPrimitives() {
// no-args constructor
}
}
(Seri)
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);
==> json is {"value1":1,"value2":"abc"}
Sonsuz özyinelemeye neden olacağından, dairesel referanslarla nesneleri serileştiremeyeceğinizi unutmayın.
(Seri kaldırma)
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);
==> obj2 is just like obj
Gson için başka bir örnek:
Gson'un öğrenmesi ve uygulanması kolaydır, bilmeniz gereken aşağıdaki iki yöntemdir:
-> toJson () - java nesnesini JSON formatına dönüştürür
-> fromJson () - JSON'u java nesnesine dönüştür
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);
}
}
Çıktı
{"data1":100,"data2":"hello"}
Kaynaklar:
JSON ana sayfasına bağlı çeşitli Java JSON serileştiricileri ve serileştiricileri vardır .
Bu yazı itibariyle şu 22 vardır:
- JSON-java .
- JSONUtil .
- jsonp .
- Json-lib .
- Stringtree .
- SOJO .
- json-taglib .
- Flexjson .
- Argo .
- jsonij .
- fastjson .
- mjson .
- jjson .
- json-basit .
- json-io .
- google-gson .
- FOSS Nova JSON .
- Mısır DÖNÜŞTÜRÜCÜ .
- Apache johnzon .
- Genson .
- cookjson .
- progbase .
... ama tabii ki liste değişebilir.
Java 7 çözümü
import javax.json.*;
...
String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()
;
Bunun için google-gson kullanmayı seviyorum ve bunun nedeni doğrudan JSONObject ile çalışmam gerekmiyor.
Bu durumda JSON Nesnenizin özelliklerine karşılık gelen bir sınıfım olurdu
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);
...
Ancak, sorunuzun daha çok olduğunu düşünüyorum, nasıl JSON String gerçek bir JSONObject nesnesi ile bitirmek.
Ben google-json api bakıyordum ve bir barebones JSONObject kullanmaya ihtiyacınız varsa, muhtemelen kullanmak istediğiniz şey olan org.json api gibi düz bir şey bulamadım.
http://www.json.org/javadoc/org/json/JSONObject.html
Org.json.JSONObject (başka bir tamamen farklı API ile) gibi bir şey yapmak istiyorsanız ...
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));
Ben google-gson güzelliği JSONObject ile uğraşmak gerekmez olduğunu düşünüyorum. Sadece json kaparsınız, serisini kaldırmak istediğiniz sınıfı geçirirsiniz ve sınıf özellikleriniz JSON ile eşleştirilir, ancak daha sonra herkesin kendi gereksinimleri vardır, belki de önceden eşleştirilmiş sınıflara sahip olmak için lüksü göze alamazsınız serileştirme tarafı çünkü işler JSON Üreten tarafında çok dinamik olabilir. Bu durumda sadece json.org'u kullanın.
JSON dize kullanarak Jackson
ile com.fasterxml.jackson.databind
:
Json-string'inizin şu şekilde olduğunu varsayarsak: 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();
Eğer kullanıyorsanız http://json-lib.sourceforge.net (net.sf.json.JSONObject)
oldukça kolay:
String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);
veya
JSONObject json = JSONSerializer.toJSON(myJsonString);
değerleri json.getString (param), json.getInt (param) vb. ile alın.
Bir dizeyi json'a dönüştürmek ve sokmak json gibidir. { "PHONETYPE": "N95", "kedi": "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);
Herhangi bir harici kütüphane kullanmaya gerek yoktur.
Bunun yerine bu sınıfı kullanabilirsiniz :) (hatta listeleri, iç içe listeleri ve json'u işler)
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 dizenizi hashmap biçimine dönüştürmek için şunu kullanın:
HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(
Codehaus Jackson - 2012'den beri RESTful webservice ve JUnit testlerim için bu harika API'yim . API'leriyle şunları yapabilirsiniz:
(1) JSON Dizesini Java fasulyesine dönüştürün
public static String beanToJSONString(Object myJavaBean) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.writeValueAsString(myJavaBean);
}
(2) JSON Dizesini JSON nesnesine dönüştürme (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) Java fasulyesini JSON String'e dönüştürün
public static Object JSONStringToBean(Class myBeanClass, String JSONString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readValue(JSONString, beanClass);
}
ref:
JsonNode API - JsonNode nesnesinden değerleri kullanma, gezinme, ayrıştırma ve değerlendirme
Eğitim - Basit öğretici nasıl JSON dizesini JsonNode dönüştürmek için Jackson kullanmak
Bir arayüzün serileştirmesi ile GSON'un aşağıdaki gibi istisnalara neden olacağını unutmayın.
"java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."
Serileştirmeyi kaldırırken; GSON bu arayüz için hangi nesnenin başlatılması gerektiğini bilmiyor.
Bu bir şekilde burada çözüldü .
Ancak FlexJSON bu çözümü doğasında var. serileştirme zamanı aşağıdaki gibi json parçası olarak sınıf adı ekliyor.
{
"HTTPStatus": "OK",
"class": "com.XXX.YYY.HTTPViewResponse",
"code": null,
"outputContext": {
"class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
"eligible": true
}
}
Yani JSON kimi olacak; ancak InstanceCreator
GSON'da gerekli olan yazmaya ihtiyacınız yoktur.
Org.json kullanma
JSON biçiminde metin içeren bir Dizeniz varsa, aşağıdaki adımları izleyerek JSON Nesnesi'ni alabilirsiniz:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject(jsonString);
} catch (JSONException e) {
e.printStackTrace();
}
Şimdi telefon tipine erişmek için
Sysout.out.println(jsonObject.getString("phonetype"));
Json tek nesnesini listeleyecek şekilde ayarlamak için
"locations":{
}
için List<Location>
kullanım
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
jackson.mapper-asl-1.9.7.jar
Dizeyi org.json.simple.JSONObject kullanarak Json Nesnesine Dönüştürme
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;
}
Daha iyi git org.json
lib kullanarak daha basit bir yol . Sadece aşağıdaki gibi çok basit bir yaklaşım yapın:
JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");
Şimdi obj
senin dönüşümünJSONObject
ilgili Dizenizin biçiminiz. Ad-değer çiftleriniz varsa bu durum söz konusudur.
Bir dize için doğrudan yapıcısına geçebilirsiniz JSONObject
. Geçerli olacaksa json String
, tamam yoksa bir istisna atar.
user.put("email", "someemail@mail.com")
işlenmemiş bir istisnayı tetikler.
try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}