আমার কাছে স্ট্রিং ভেরিয়েবল বলা আছে jsonString
:
{"phonetype":"N95","cat":"WP"}
এখন আমি এটিকে JSON অবজেক্টে রূপান্তর করতে চাই। আমি গুগলে আরও অনুসন্ধান করেছি কিন্তু কোনও প্রত্যাশিত উত্তর পাইনি ...
আমার কাছে স্ট্রিং ভেরিয়েবল বলা আছে jsonString
:
{"phonetype":"N95","cat":"WP"}
এখন আমি এটিকে JSON অবজেক্টে রূপান্তর করতে চাই। আমি গুগলে আরও অনুসন্ধান করেছি কিন্তু কোনও প্রত্যাশিত উত্তর পাইনি ...
উত্তর:
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
থাকা org.json.simple.parser
সত্ত্বেও পার্সি এক্সেকসেপ্টের জন্য এটি একটি ত্রুটি বা NoClassDefFound ত্রুটি দেয় ।
আপনি ব্যবহার করতে পারেন 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
গসনের জন্য আরেকটি উদাহরণ:
গসন শিখতে এবং প্রয়োগ করা সহজ, আপনার নিম্নলিখিত দুটি পদ্ধতি জানা উচিত:
-> টুজসন () - জাভা বস্তুকে 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"}
সম্পদ:
জেএসওএন হোম পৃষ্ঠা থেকে লিখিত বিভিন্ন জাভা জেএসএন সিরিয়ালাইজার এবং ডিসরিয়ালাইজার রয়েছে ।
এই লেখা হিসাবে, এই 22 আছে:
- জেএসওএন-জাভা ।
- JSONUtil ।
- jsonp ।
- JSON-liberal এর সংক্ষিপ্ত রূপ ।
- স্ট্রিংট্রি ।
- SOJO ।
- json-taglib ।
- Flexjson ।
- আরগো ।
- jsonij ।
- fastjson ।
- mjson ।
- jjson ।
- json- সরল ।
- json-io ।
- Google এর gson ।
- ফস নোভা জেএসন ।
- কর্ন কনভার্টার ।
- আপাচে জনজন ।
- Genson ।
- cookjson ।
- progbase ।
... তবে অবশ্যই তালিকাটি পরিবর্তন হতে পারে।
জাভা 7 সমাধান
import javax.json.*;
...
String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()
;
আমি এর জন্য গুগল-গসন ব্যবহার করতে চাই এবং এটি ঠিক কারণ আমার সরাসরি জেএসনঅবজেক্টের সাথে কাজ করার দরকার নেই।
সেক্ষেত্রে আমার কাছে একটি ক্লাস থাকবে যা আপনার জেএসওন অবজেক্টের বৈশিষ্ট্যের সাথে মিল করবে
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);
...
তবে আমি মনে করি আপনার প্রশ্নটি আরও পছন্দ, আমি কীভাবে কোনও জেএসএন স্ট্রিংয়ের আসল জেএসএনওবজেক্ট অবজেক্টটি দিয়ে শেষ করব।
আমি গুগল-জসন এপিআইয়ের দিকে চেয়ে ছিলাম এবং 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"));
আমি মনে করি গুগল-গসনের সৌন্দর্য হ'ল আপনার জেএসএনওবজেক্টের সাথে ডিল করার দরকার নেই। আপনি কেবল জসনকে ধরে ফেলুন, ডিেসরিয়াল করতে চাইলে ক্লাসটি পাস করুন এবং আপনার শ্রেণীর বৈশিষ্ট্যগুলি জেএসএনের সাথে মিলবে, তবে তারপরেও প্রত্যেকের নিজস্ব প্রয়োজনীয়তা রয়েছে, সম্ভবত আপনি প্রাক-ম্যাপযুক্ত ক্লাসগুলি বিলাসিতা বহন করতে পারবেন না ডিসরিয়ালাইজিং দিক কারণ জিনিসগুলি জেএসএন জেনারেটের পক্ষে খুব গতিশীল হতে পারে। সেক্ষেত্রে কেবল json.org ব্যবহার করুন।
এরJackson
সাথে ব্যবহার করে JSON এ স্ট্রিং করুনcom.fasterxml.jackson.databind
:
আপনার জসন-স্ট্রিং ধরে নিলে এটি এটি উপস্থাপন করে: jsonString = {"ফোনেটাইপ": "এন 95", "বিড়াল": "ডাব্লুপি"}
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 ব্যবহার করছেন (নেট.এসএফ.জসন.জেএসএনঅজেক্ট)
এটি বেশ সহজ:
String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);
অথবা
JSONObject json = JSONSerializer.toJSON(myJsonString);
তারপরে json.getString (প্যারাম), json.getInt (প্যারাম) এবং আরও কিছু দিয়ে মানগুলি পান।
স্ট্রিংটিকে জসন এবং স্টিং রূপান্তর করা জাসনের মতো। { "PHONETYPE": "N95", "বিড়াল": "ডাব্লু"}
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);
কোনও বাহ্যিক গ্রন্থাগার ব্যবহার করার দরকার নেই।
পরিবর্তে আপনি এই শ্রেণিটি ব্যবহার করতে পারেন :) (এমনকি তালিকা, নেস্টেড তালিকা এবং জসন এমনকি পরিচালনা করে)
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(
কোডাউস জ্যাকসন - আমি আমার রেস্টস্টুল ওয়েববারসিস এবং ইউনাইট পরীক্ষার জন্য ২০১২ সাল থেকে এই দুর্দান্ত এপিআই। তাদের এপিআই দিয়ে আপনি করতে পারেন:
(1) JSON স্ট্রিংটিকে জাভা বিনতে রূপান্তর করুন
public static String beanToJSONString(Object myJavaBean) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.writeValueAsString(myJavaBean);
}
(২) জেএসএন স্ট্রিংকে জেএসওএন অবজেক্টে (জসননোড) রূপান্তর করুন
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:
জসননোড এপিআই - জসননোড অবজেক্ট থেকে মানগুলি কীভাবে ব্যবহার, নেভিগেট, পার্স এবং মূল্যায়ন করবেন
টিউটোরিয়াল - জ্যাকসন স্ট্রিংটিকে জসননোডে রূপান্তর করতে কীভাবে জ্যাকসন ব্যবহার করবেন সে সম্পর্কে সহজ টিউটোরিয়াল
নোট করুন যে একটি ইন্টারফেসকে deserializing সঙ্গে 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 করার সময়; GSON জানেন না যে ইন্টারফেসটির জন্য কোন বস্তুকে অন্তরঙ্গ করতে হবে।
এটি এখানে কোনওভাবে সমাধান করা হয়েছে ।
তবে ফ্লেক্সজেসনের সহজাতভাবে এই সমাধান রয়েছে। সিরিয়ালাইজ করার সময় এটি নীচের মত জসনের অংশ হিসাবে শ্রেণীর নাম যুক্ত করছে।
{
"HTTPStatus": "OK",
"class": "com.XXX.YYY.HTTPViewResponse",
"code": null,
"outputContext": {
"class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
"eligible": true
}
}
সুতরাং জেএসওএন কিছুটা কম্বার হবে; তবে আপনার লেখার দরকার নেই InstanceCreator
যা জিএসএন-তে প্রয়োজনীয়।
আপনার যদি 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 ব্যবহার করে স্ট্রিংটিকে জসন অবজেক্টে রূপান্তর করা
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
Lib ব্যবহার করে আরও সহজ উপায় সঙ্গে ভাল । নীচের মত কেবল একটি খুব সহজ পদ্ধতির করুন:
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.}