জাভায় স্ট্রিংকে কীভাবে JSONObject এ রূপান্তর করবেন


423

আমার কাছে স্ট্রিং ভেরিয়েবল বলা আছে jsonString:

{"phonetype":"N95","cat":"WP"}

এখন আমি এটিকে JSON অবজেক্টে রূপান্তর করতে চাই। আমি গুগলে আরও অনুসন্ধান করেছি কিন্তু কোনও প্রত্যাশিত উত্তর পাইনি ...


1
এর কোনও অধিকার নেই, কারণ আমি জসন স্ট্রিং থেকে জেসন অবজেক্ট তৈরি করতে চেয়েছিলাম, ডগবেনের দেওয়া উত্তর উত্তর দেওয়ার জন্য সঠিক ট্র্যাক দেখিয়েছে।
জনাব সাজিদ শায়খ

মাপ্পান এবং ডগবেনের উভয় উত্তরই সঠিক তবে তারা বিভিন্ন মডিউল ব্যবহার করছে। আপনার প্রত্যেকের জন্য সঠিক মডিউলটি আমদানি করতে সাবধান হওয়া উচিত কারণ অনেকগুলি JSONObject মডিউল রয়েছে।
আরশসফট 14'15

আমি জিএসওএন লাইব্রেরি দিয়ে চেষ্টা করেছি। এই লিঙ্কটি চেক করুন
তিরুমালওয়ালভান

উত্তর:


677

Org.json লাইব্রেরি ব্যবহার করে :

try {
     JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
     Log.d("Error", err.toString());
}

7
আমি সেই মতো JSONObject js = নতুন JSONObject (jsonstring) এর সাথে চেষ্টা করেছি; তবে এটি ত্রুটি দেখায়। jsonstring এ
জনাব সাজিদ শায়খ

29
তিনি একটি ত্রুটি পেয়েছিলেন কারণ তিনি org.json ব্যবহার করছেন না, তিনি গুগল-জিএসএন ব্যবহার করছেন যা সেভাবে কাজ করে না।
গুবাত্রন

2
@ গুব্যাট্রন ধন্যবাদ বন্ধু আপনি ঠিক বলেছেন আমি এখনই এটি ডাউনলোড করে জার তৈরি করেছি তাই এখন এটির কাজ ঠিক আছে।
জনাব সাজিদ শায়খ

3
@ ডগবনে আমি স্ট্রিংটির কাঠামো না জানলে কী হয়। আরও স্পষ্টভাবে, আমি কীভাবে একটি ডায়নামিক উত্পন্ন জসনস্ট্রিংকে জসনঅবজেক্টে রূপান্তর করতে পারি?
সৌম্যরাজ

70
গুগল-গসন ব্যবহার করে আপনি এটি এর মতো করতে পারেন:JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
কাজী

163

এখনও উত্তর খুঁজছেন যে কেউ:

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);

23
এবং আপনি দয়া করে এর জন্য কোন প্যাকেজটি আমদানি করবেন তা উল্লেখ করতে পারেন?
গিফিশিং

10
এটি আমার সাথে কাজ করছে:import org.json.simple.JSONObject
মাফরো 34

1
জেসন-সিম্পল এর 1.1.1 সংস্করণটিতে কিছু সমস্যা হয়েছে বলে মনে হচ্ছে। উপরেরটি "আনহ্যান্ডলড ব্যতিক্রম" দেয় parser.parse(এবং ট্রাই -ক্যাচ বা নিক্ষেপ চায়। আপনি যখন কোনও একটি যুক্ত করুন, এটি মাভেনের অবনতিতে জেসন-সিম্পল এবং প্রকল্পটির লাইব্রেরিতে স্পষ্টভাবে দৃশ্যমান Unhandled exception type ParseExceptionথাকা org.json.simple.parserসত্ত্বেও পার্সি এক্সেকসেপ্টের জন্য এটি একটি ত্রুটি বা NoClassDefFound ত্রুটি দেয় ।
জুহা আনটিনেন

2
org.json একটি প্রুফ-অফ কনসেপ্ট লাইব্রেরি। এটি পারফরম্যান্স এবং বৈশিষ্ট্যগুলির দিক থেকে সবচেয়ে খারাপ। নির্বাচনের আগে জসন লিবের বৈশিষ্ট্য সেট এবং পারফরম্যান্সের দিকে নজর দেওয়া উচিত। আমি জেএমএইচ ব্যবহার করে এই মানদণ্ডটি দেখুন: github.com/fabienrenaud/java-json- বেঞ্চমার্ক এটি স্পষ্টতই জ্যাকসনকে অন্য যে কোনও কিছুর চেয়ে দ্রুত এবং org.json এর চেয়ে 5 থেকে 6 গুণ দ্রুত দেখায়।
ফেবিয়ান

5
JSONParser পার্সার = নতুন JSONParser (); অঙ্কিত বলে মনে হচ্ছে
ওউইসাল

46

আপনি ব্যবহার করতে পারেন 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"}

সম্পদ:

গুগল গসন প্রকল্পের হোম পৃষ্ঠা

গসন ব্যবহারকারী গাইড

উদাহরণ


"আপনি ক্লায়েন্ট সাইড এ প্রক্রিয়া জিজ্ঞাসা করা হয় যদি আপনার প্রোগ্রামিং ভাষার উপর নির্ভর করে। জাভা সঙ্গে উদাহরণস্বরূপ, আপনি Google এর gson ব্যবহার করতে পারেন" আমি মনে করি আপনি সম্ভবত সেখানে বরং "ক্লায়েন্ট" চেয়ে "সার্ভার" বোঝানো। এবং তিনি তার প্রশ্নটি "জাভা" ট্যাগ করেছিলেন।
টিজে ক্রোডার

+1 টি। আমি এখন ৪-৫ টি প্রকল্পে জিএসন ব্যবহার করেছি, একেবারে ভিন্ন প্রসঙ্গে, সার্ভার এবং ক্লায়েন্ট সাইডে (এছাড়াও অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে), এবং এটি কখনও আমাকে ব্যর্থ করেনি। খুব সুন্দর এবং পরিষ্কার lib।
জোনিক

আপনি যদি জিএসএন ব্যবহার করতে চান তবে পূর্বনির্ধারিত পোজো ক্লাস না থাকলে (যেমন আপনার পূর্বনির্ধারিত কাঠামো ছাড়াই জেনেরিক জসন রয়েছে), এই উত্তরটি সাহায্য করতে পারে - স্ট্যাকওভারফ্লো
লেয়ানড্রো ডেভিড

40

জেএসওএন হোম পৃষ্ঠা থেকে লিখিত বিভিন্ন জাভা জেএসএন সিরিয়ালাইজার এবং ডিসরিয়ালাইজার রয়েছে ।

এই লেখা হিসাবে, এই 22 আছে:

... তবে অবশ্যই তালিকাটি পরিবর্তন হতে পারে।


24

জাভা 7 সমাধান

import javax.json.*;

...

String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()

;


5
এই লাইব্রেরির সবকটির মধ্যে সবচেয়ে খারাপ অভিনয় রয়েছে। আমি এই জেএমএইচ দিয়েছিলাম এই মানদণ্ডটি দেখুন: github.com/fabienrenaud/java-json-benmarkmark
fanien

15

রূপান্তর করতে Stringমধ্যে JSONObjectআপনি শুধু পাস করার প্রয়োজন Stringপ্রস্ততকর্তার মধ্যে উদাহরণস্বরূপ JSONObject

উদাহরণ:

JSONObject jsonObj = new JSONObject("your string");

10

আমি এর জন্য গুগল-গসন ব্যবহার করতে চাই এবং এটি ঠিক কারণ আমার সরাসরি জেএসনঅবজেক্টের সাথে কাজ করার দরকার নেই।

সেক্ষেত্রে আমার কাছে একটি ক্লাস থাকবে যা আপনার জেএসওন অবজেক্টের বৈশিষ্ট্যের সাথে মিল করবে

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 ব্যবহার করুন।


8

আপনাকে অবশ্যই org.json আমদানি করতে হবে

JSONObject jsonObj = null;
        try {
            jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
        } catch (JSONException e) {
            e.printStackTrace();
        }

8

এর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();

3

আপনি যদি http://json-lib.sourceforge.net ব্যবহার করছেন (নেট.এসএফ.জসন.জেএসএনঅজেক্ট)

এটি বেশ সহজ:

String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);

অথবা

JSONObject json = JSONSerializer.toJSON(myJsonString);

তারপরে json.getString (প্যারাম), json.getInt (প্যারাম) এবং আরও কিছু দিয়ে মানগুলি পান।


জেএসএনওবজেক্ট জসন = জেএসএনএসরিয়ালাইজার.টোজেএসন (মাইজেসনস্ট্রিং); অন্য একটি কাজের সাথে মেলে না এমন প্রকারের একটি এরোগ তৈরি করবে
হেনরিক সি।

3

স্ট্রিংটিকে জসন এবং স্টিং রূপান্তর করা জাসনের মতো। { "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);

জেএসওএন পার্সার কী? এটি কি যোগাযোগের সরবরাহকারীরই অংশ?
ইগোরগানাপলস্কি

1
@ ইগোরগানাপলস্কি জেএসএনপপার্সার হ'ল সহজ জেএসওএন সরবরাহ করেছেন bu এই কাজের জন্য, JSON-সহজ-1.1.1.jar অন্তর্ভুক্ত
অরবিন্দ Cheekkallur

3

জেনেরিক জসন পার্সিংয়ের জন্য ফাস্টএক্সএমএল এর জসননোড ব্যবহার করুন। এটি অভ্যন্তরীণভাবে সমস্ত ইনপুটগুলির জন্য মূল মানটির মানচিত্র তৈরি করে।

উদাহরণ:

private void test(@RequestBody JsonNode node)

ইনপুট স্ট্রিং :

{"a":"b","c":"d"}

2

কোনও বাহ্যিক গ্রন্থাগার ব্যবহার করার দরকার নেই।

পরিবর্তে আপনি এই শ্রেণিটি ব্যবহার করতে পারেন :) (এমনকি তালিকা, নেস্টেড তালিকা এবং জসন এমনকি পরিচালনা করে)

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(

2

কোডাউস জ্যাকসন - আমি আমার রেস্টস্টুল ওয়েববারসিস এবং ইউনাইট পরীক্ষার জন্য ২০১২ সাল থেকে এই দুর্দান্ত এপিআই। তাদের এপিআই দিয়ে আপনি করতে পারেন:

(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:

  1. কোডহাউস জ্যাকসন

  2. জসননোড এপিআই - জসননোড অবজেক্ট থেকে মানগুলি কীভাবে ব্যবহার, নেভিগেট, পার্স এবং মূল্যায়ন করবেন

  3. টিউটোরিয়াল - জ্যাকসন স্ট্রিংটিকে জসননোডে রূপান্তর করতে কীভাবে জ্যাকসন ব্যবহার করবেন সে সম্পর্কে সহজ টিউটোরিয়াল


1

নোট করুন যে একটি ইন্টারফেসকে 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যা জিএসএন-তে প্রয়োজনীয়।


1

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"));

0

তালিকার জন্য জেসন একক বস্তু সেট করার জন্য

"locations":{

}

মধ্যে List<Location>

ব্যবহার

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

jackson.mapper-ASL-1.9.7.jar


0

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;
}

-1

org.jsonLib ব্যবহার করে আরও সহজ উপায় সঙ্গে ভাল । নীচের মত কেবল একটি খুব সহজ পদ্ধতির করুন:

JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");

এখন objআপনার নিজের স্ট্রিংয়ের রূপান্তরিত JSONObjectফর্ম। আপনার ক্ষেত্রে নাম-মান জোড়া থাকলে এটি হয়।

একটি স্ট্রিংয়ের জন্য আপনি সরাসরি নির্মাণকারীর কাছে যেতে পারেন JSONObject। যদি এটি বৈধ হয়ে থাকে json String, তবে ঠিক আছে অন্যথায় এটি একটি ব্যতিক্রম ছুঁড়ে ফেলবে।


আপনি যা লিখেছিলেন তা আক্ষরিকভাবে করছেন: user.put("email", "someemail@mail.com")একটি নিরস্ত্র ব্যতিক্রম ট্রিগার করে।
সেবাস্তিয়ালসনো

1
@ সেবাস্তিয়ালসনো হ্যাঁ, আপনার ব্যতিক্রমটি ধরা দরকার। এটি পছন্দ করুন:try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}
TheLittleNaruto

@ বিদ্যা না এটা না। এটি আবার তুলনা বিবেচনা করুন।
TheLittleNaruto

@ বিদ্য্যা শিওর ডুড
TheLittleNaruto
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.