मेरे पास स्ट्रिंग चर है jsonString
:
{"phonetype":"N95","cat":"WP"}
अब मैं इसे JSON ऑब्जेक्ट में बदलना चाहता हूं। मैंने Google पर और खोज की लेकिन कोई अपेक्षित उत्तर नहीं मिला ...
मेरे पास स्ट्रिंग चर है jsonString
:
{"phonetype":"N95","cat":"WP"}
अब मैं इसे JSON ऑब्जेक्ट में बदलना चाहता हूं। मैंने Google पर और खोज की लेकिन कोई अपेक्षित उत्तर नहीं मिला ...
जवाबों:
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();
जवाब की तलाश में किसी को भी:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
import org.json.simple.JSONObject
parser.parse(
और ट्राय -कैच या थ्रो चाहता है। लेकिन जब आप या तो एक जोड़ते हैं, तो यह एक Unhandled exception type ParseException
त्रुटि देता है , या NoClassDefFound त्रुटि ParseException के लिए org.json.simple.parser
तब भी जब आपके पास Maven अवसादों में json-simple है और प्रोजेक्ट की लाइब्रेरी में स्पष्ट रूप से दिखाई देता है।
आप उपयोग कर सकते हैं 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"}
ध्यान दें कि आप वस्तुओं को गोलाकार संदर्भों के साथ अनुक्रमित नहीं कर सकते हैं क्योंकि इससे अनंत पुनरावृत्ति होगी।
(Deserialization)
BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);
==> obj2 is just like obj
Gson के लिए एक और उदाहरण:
Gson सीखना और कार्यान्वित करना आसान है, आपको यह जानना आवश्यक है कि निम्नलिखित दो विधियाँ हैं:
-> toJson () - जावा ऑब्जेक्ट को JSON फॉर्मेट में कन्वर्ट करें
-> fromJson () - JSON को जावा ऑब्जेक्ट में बदलें
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"}
संसाधन:
JSON होम पेज से विभिन्न Java JSON सीरियलाइज़र और deserializers जुड़े हुए हैं ।
इस लेखन के रूप में, ये 22 हैं:
- JSON- जावा ।
- JSONUtil ।
- jsonp ।
- Json-lib ।
- झनकार ।
- SOJO ।
- json-taglib ।
- फ्लेक्सजसन ।
- अर्गो ।
- jsonij ।
- fastjson ।
- Mjson ।
- जजसन ।
- json-सरल ।
- json-io ।
- गूगल-gson ।
- FOSS नोवा जेन्सन ।
- मकई कन्वर्टर ।
- अपाचे जॉनज़ोन ।
- गेंसन ।
- रसोइयाँ ।
- प्रोग्रेस ।
... लेकिन निश्चित रूप से सूची बदल सकती है।
जावा 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);
...
हालाँकि, मुझे लगता है कि आपका प्रश्न अधिक है, मैं एक JSON स्ट्रिंग से एक वास्तविक JSONObject ऑब्जेक्ट के साथ कैसे अंत कर सकता हूं।
मैं google-json api को देख रहा था और org.json की एपीआई के रूप में सीधे आगे कुछ भी नहीं पा रहा था, जो कि शायद आप जो उपयोग करना चाहते हैं यदि आप नंगे पैर JSONObject का उपयोग करने के लिए बहुत दृढ़ता से कर रहे हैं।
http://www.json.org/javadoc/org/json/JSONObject.html
Org.json.JSONObject (एक और पूरी तरह से अलग एपीआई) के साथ यदि आप कुछ ऐसा करना चाहते हैं ...
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));
मुझे लगता है कि google-gson की सुंदरता यह है कि आपको JSONObject से निपटने की आवश्यकता नहीं है। आप सिर्फ जसन को पकड़ते हैं, कक्षा में प्रवेश पाने के इच्छुक हैं, और आपकी कक्षा की विशेषताओं को JSON से मिलान किया जाएगा, लेकिन फिर से, हर किसी की अपनी आवश्यकताएं होती हैं, हो सकता है कि आप पूर्व-मैप की गई कक्षाओं के लिए विलासिता का खर्च नहीं उठा सकते। डेसर्निलाइज़िंग पक्ष क्योंकि JSON जनरेटिंग साइड पर चीज़ें बहुत अधिक गतिशील हो सकती हैं। उस स्थिति में सिर्फ json.org का उपयोग करें।
स्ट्रिंग केJackson
साथ JSON का उपयोग करना com.fasterxml.jackson.databind
:
अपने json-string को इस रूप में दर्शाता है: 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();
यदि आप http://json-lib.sourceforge.net (net.sf.json.JSONObject) का उपयोग कर रहे हैं
यह बहुत आसान है:
String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);
या
JSONObject json = JSONSerializer.toJSON(myJsonString);
मान तब json.getString (परम), json.getInt (परम) और इसी तरह से प्राप्त करें।
स्ट्रिंग को जोंस में बदलने के लिए और स्टिंग जसन की तरह है। { "PHONETYPE": "N95" "बिल्ली": "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 को भी संभालता है)
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<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(
कोडहॉस जैक्सन - मैं 2012 के बाद से अपने रैस्टफुल वेबसर्विस और ज्यूनीट परीक्षणों के लिए यह भयानक एपीआई रहा हूं। उनके एपीआई के साथ, आप कर सकते हैं:
(1) JSON स्ट्रिंग को जावा बीन में बदलें
public static String beanToJSONString(Object myJavaBean) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.writeValueAsString(myJavaBean);
}
(2) JSON स्ट्रिंग को 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) जावा बीन को JSON स्ट्रिंग में कनवर्ट करें
public static Object JSONStringToBean(Class myBeanClass, String JSONString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readValue(JSONString, beanClass);
}
refs:
JsonNode API - JsonNode ऑब्जेक्ट से मानों का उपयोग, नेविगेट, पार्स और मूल्यांकन कैसे करें
ट्यूटोरियल - सरल ट्यूटोरियल जैक्सन स्ट्रिंग को JsonNode में बदलने के लिए जैक्सन का उपयोग कैसे करें
ध्यान दें कि इंटरफ़ेस को डीसर्विसलाइज़ करने के साथ 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."
जबकि deserialize; जीएसओएन को यह नहीं पता होता है कि उस इंटरफ़ेस के लिए किस ऑब्जेक्ट को इंटिनेटेड किया जाना है।
हालाँकि FlexJSON का यह समाधान स्वाभाविक है। जबकि क्रमबद्ध समय यह नीचे की तरह json के भाग के रूप में वर्ग नाम जोड़ रहा है।
{
"HTTPStatus": "OK",
"class": "com.XXX.YYY.HTTPViewResponse",
"code": null,
"outputContext": {
"class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
"eligible": true
}
}
तो JSON कुछ मौखिक हो जाएगा; लेकिन आपको लिखने की आवश्यकता नहीं है InstanceCreator
जो कि GSON में आवश्यक है।
Org.json का उपयोग करना
यदि आपके पास एक स्ट्रिंग है जिसमें JSON प्रारूप पाठ है, तो आप निम्न चरणों का पालन करके JSON ऑब्जेक्ट प्राप्त कर सकते हैं:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject(jsonString);
} catch (JSONException e) {
e.printStackTrace();
}
अब फोनटाइप का उपयोग करने के लिए
Sysout.out.println(jsonObject.getString("phonetype"));
सूची के लिए एकल वस्तु सेट करने के लिए यानी
"locations":{
}
में List<Location>
उपयोग
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
jackson.mapper-ASL-1.9.7.jar
Org.json.simple.JSONObject का उपयोग करके JSON ऑब्जेक्ट को स्ट्रिंग परिवर्तित करना
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;
}
बेहतर काम का उपयोग करके अधिक सरल तरीके के साथ जाओ org.json
। बस नीचे के रूप में एक बहुत ही सरल तरीका है:
JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");
अब आपके संबंधित स्ट्रिंग obj
का आपका परिवर्तित JSONObject
रूप है। यदि आपके पास नाम-मूल्य जोड़े हैं तो यह स्थिति में है।
एक स्ट्रिंग के लिए आप सीधे कंस्ट्रक्टर के पास जा सकते हैं JSONObject
। यदि यह वैध होगा json String
, तो ठीक है अन्यथा यह एक अपवाद फेंक देगा।
user.put("email", "someemail@mail.com")
एक अखंड अपवाद को ट्रिगर करता है।
try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}