Saya memiliki variabel String yang disebut jsonString
:
{"phonetype":"N95","cat":"WP"}
Sekarang saya ingin mengubahnya menjadi Object JSON. Saya mencari lebih banyak di Google tetapi tidak mendapatkan jawaban yang diharapkan ...
Saya memiliki variabel String yang disebut jsonString
:
{"phonetype":"N95","cat":"WP"}
Sekarang saya ingin mengubahnya menjadi Object JSON. Saya mencari lebih banyak di Google tetapi tidak mendapatkan jawaban yang diharapkan ...
Jawaban:
Menggunakan perpustakaan org.json :
try {
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
Log.d("Error", err.toString());
}
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
Kepada siapa pun yang masih mencari jawaban:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
import org.json.simple.JSONObject
parser.parse(
dan menginginkan try-catch atau throws. Tetapi ketika Anda menambahkan salah satu, itu memberikan Unhandled exception type ParseException
kesalahan, atau kesalahan NoClassDefFound untuk ParseException org.json.simple.parser
bahkan ketika Anda memiliki json-sederhana dalam depedensi Maven dan terlihat jelas di perpustakaan proyek.
Anda bisa menggunakannya google-gson
. Detail:
Contoh Objek
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3;
BagOfPrimitives() {
// no-args constructor
}
}
(Serialisasi)
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);
==> json is {"value1":1,"value2":"abc"}
Perhatikan bahwa Anda tidak dapat membuat serial objek dengan referensi melingkar karena hal itu akan menghasilkan rekursi tak terbatas.
(Deserialisasi)
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);
==> obj2 is just like obj
Contoh lain untuk Gson:
Gson mudah dipelajari dan diimplementasikan, yang perlu Anda ketahui adalah dua metode berikut:
-> toJson () - mengonversi objek java ke format JSON
-> fromJson () - mengubah JSON menjadi objek 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);
}
}
Keluaran
{"data1":100,"data2":"hello"}
Sumber:
Ada berbagai serializers dan deserializer Java JSON yang ditautkan dari beranda JSON .
Pada tulisan ini, ada 22 ini:
- JSON-java .
- JSONUtil .
- jsonp .
- Json-lib .
- Stringtree .
- SOJO .
- json-taglib .
- Flexjson .
- Argo .
- jsonij .
- fastjson .
- mjson .
- jjson .
- json-sederhana .
- json-io .
- google-gson .
- FOSS Nova JSON .
- KONVERTER Jagung .
- Apache johnzon .
- Genson .
- cookjson .
- progbase .
... tapi tentu saja daftar bisa berubah.
Solusi Java 7
import javax.json.*;
...
String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()
;
Saya suka menggunakan google-gson untuk ini, dan itu tepatnya karena saya tidak perlu bekerja dengan JSONObject secara langsung.
Dalam hal ini saya akan memiliki kelas yang akan sesuai dengan properti Obyek JSON Anda
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);
...
Namun, saya pikir pertanyaan Anda lebih seperti, Bagaimana saya mengakhiri dengan objek JSONObject aktual dari String JSON.
Saya sedang melihat api google-json dan tidak dapat menemukan sesuatu yang lurus ke depan seperti api org.json yang mungkin apa yang ingin Anda gunakan jika Anda sangat membutuhkan menggunakan barebones JSONObject.
http://www.json.org/javadoc/org/json/JSONObject.html
Dengan org.json.JSONObject (API lain yang sama sekali berbeda) Jika Anda ingin melakukan sesuatu seperti ...
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));
Saya pikir keindahan google-gson adalah Anda tidak perlu berurusan dengan JSONObject. Anda hanya mengambil json, lulus kelas yang ingin deserialize ke, dan atribut kelas Anda akan dicocokkan dengan JSON, tetapi sekali lagi, semua orang memiliki persyaratan sendiri, mungkin Anda tidak mampu membayar mewah untuk memiliki kelas yang telah dipetakan pada sisi deserializing karena hal-hal mungkin terlalu dinamis di sisi Generasi JSON. Dalam hal itu gunakan saja json.org.
String ke JSON menggunakan Jackson
dengan com.fasterxml.jackson.databind
:
Dengan asumsi json-string Anda mewakili sebagai ini: 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();
Jika Anda menggunakan http://json-lib.sourceforge.net (net.sf.json.JSONObject)
itu sangat mudah:
String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);
atau
JSONObject json = JSONSerializer.toJSON(myJsonString);
dapatkan nilai kemudian dengan json.getString (param), json.getInt (param) dan seterusnya.
Untuk mengkonversi string ke json dan sengatannya seperti 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);
Tidak perlu menggunakan perpustakaan eksternal.
Anda dapat menggunakan kelas ini sebagai gantinya :) (menangani daftar genap, daftar bersarang, dan 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;
}
}
Untuk mengonversi string JSON Anda ke hashmap gunakan ini:
HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(
Codehaus Jackson - Saya telah menggunakan API yang luar biasa ini sejak 2012 untuk layanan web dan pengujian JUnit saya yang tenang. Dengan API mereka, Anda dapat:
(1) Konversi JSON String ke Java bean
public static String beanToJSONString(Object myJavaBean) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.writeValueAsString(myJavaBean);
}
(2) Mengubah String JSON menjadi objek JSON (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) Konversi kacang Jawa ke String JSON
public static Object JSONStringToBean(Class myBeanClass, String JSONString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readValue(JSONString, beanClass);
}
REFS:
JsonNode API - Cara menggunakan, menavigasi, mengurai dan mengevaluasi nilai-nilai dari objek JsonNode
Tutorial - Tutorial sederhana cara menggunakan Jackson untuk mengonversi string JSON ke JsonNode
Perhatikan bahwa GSON dengan deserializing antarmuka akan menghasilkan pengecualian seperti di bawah ini.
"java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."
Sementara deserialize; GSON tidak tahu objek mana yang harus diintegrasikan untuk antarmuka itu.
Ini diselesaikan entah bagaimana di sini .
Namun FlexJSON memiliki solusi ini secara inheren. sementara cerita bersambung waktu itu menambahkan nama kelas sebagai bagian dari json seperti di bawah ini.
{
"HTTPStatus": "OK",
"class": "com.XXX.YYY.HTTPViewResponse",
"code": null,
"outputContext": {
"class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
"eligible": true
}
}
Jadi JSON akan menjadi beberapa; tetapi Anda tidak perlu menulis InstanceCreator
yang diperlukan di GSON.
Menggunakan org.json
Jika Anda memiliki String yang berisi teks format JSON, maka Anda bisa mendapatkan Objek JSON dengan langkah-langkah berikut:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject(jsonString);
} catch (JSONException e) {
e.printStackTrace();
}
Sekarang untuk mengakses fonetype
Sysout.out.println(jsonObject.getString("phonetype"));
Untuk mengatur objek json tunggal ke daftar yaitu
"locations":{
}
masuk ke List<Location>
menggunakan
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
jackson.mapper-asl-1.9.7.jar
Mengubah String ke Objek Json dengan menggunakan 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;
}
Better Go dengan cara yang lebih sederhana dengan menggunakan org.json
lib. Lakukan saja pendekatan yang sangat sederhana seperti di bawah ini:
JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");
Sekarang obj
adalah JSONObject
bentuk Anda yang dikonversi dari String Anda masing-masing. Ini berlaku jika Anda memiliki pasangan nama-nilai.
Untuk string, Anda dapat langsung meneruskan ke konstruktor JSONObject
. Jika itu akan menjadi valid json String
, maka oke kalau tidak itu akan membuang pengecualian.
user.put("email", "someemail@mail.com")
memicu pengecualian yang tidak tertangani.
try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}