স্ট্রিং থেকে জেসন অবজেক্ট অ্যান্ড্রয়েডে রূপান্তর


107

আমি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন নিয়ে কাজ করছি। আমার অ্যাপ্লিকেশনটিতে আমাকে স্ট্রিংটি জসন অবজেক্টে রূপান্তর করতে হবে, তারপরে মানগুলিকে পার্স করতে হবে। আমি স্ট্যাকওভারফ্লোতে একটি সমাধান অনুসন্ধান করেছি এবং অনুরূপ সমস্যাটি এখানে লিঙ্কটি পেয়েছি

সমাধানটি এরকম

       `{"phonetype":"N95","cat":"WP"}`
        JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");

আমি আমার কোডে একইভাবে ব্যবহার করি। আমার স্ট্রিং হয়

{"ApiInfo":{"description":"userDetails","status":"success"},"userDetails":{"Name":"somename","userName":"value"},"pendingPushDetails":[]}

string mystring= mystring.replace("\"", "\\\"");

এবং প্রতিস্থাপনের পরে আমি এই হিসাবে ফলাফল পেয়েছি

{\"ApiInfo\":{\"description\":\"userDetails\",\"status\":\"success\"},\"userDetails\":{\"Name\":\"Sarath Babu\",\"userName\":\"sarath.babu.sarath babu\",\"Token\":\"ZIhvXsZlKCNL6Xj9OPIOOz3FlGta9g\",\"userId\":\"118\"},\"pendingPushDetails\":[]}

যখন আমি মৃত্যুদন্ড কার্যকর করি JSONObject jsonObj = new JSONObject(mybizData);

আমি নীচের জসন ব্যতিক্রম পাচ্ছি

org.json.JSONException: Expected literal value at character 1 of

আমার সমস্যা সমাধান করতে দয়া করে আমাকে সহায়তা করুন।


আমার ধারণা আপনার প্রতিস্থাপনের কারণে আপত্তিজনক চরিত্রটি ব্যাকস্ল্যাশ। কেন আপনি ঠিক করছেন? JSON স্ট্রিংটি কোথা থেকে আসে?
টিগুচি

আমি এইচটিএমএল থেকে স্ট্রিংটি পাচ্ছি..জসন হিসাবে নয়
সারাথ

1
কেবল মাইস্ট্রিং = মাইস্ট্রিং.রেপ্লেস ("\" "," \\\ "") সরান; এবং দেখুন তাহলে এটি আপনার পক্ষে কাজ করে কিনা।
টিগুচি

উত্তর:


227

স্ল্যাশগুলি সরান:

String json = {"phonetype":"N95","cat":"WP"};

try {

    JSONObject obj = new JSONObject(json);

    Log.d("My App", obj.toString());

} catch (Throwable t) {
    Log.e("My App", "Could not parse malformed JSON: \"" + json + "\"");
}

4
স্ট্রিংটি JSON অবজেক্টের অ্যারে হলে কী হবে? "[{}, {}, {}]"
ফ্রান্সিসকো মোরালেস

3
@FranciscoCorralesMorales আপনি ব্যবহার করতে পারেন JSONArray obj = new JSONArray(json);। তারপরে আপনি অ্যারের মাধ্যমে পুনরাবৃত্তি করতে একটি লুপ ব্যবহার করতে পারেন ।
ফিল

2
@FranciscoCorralesMorales শুধু একটি ব্যবহার করে দেখুন-ধরা ব্লক। যদি একটি ব্যর্থ হয় তবে অন্যটিকে ধরে নিন।
ফিল

1
@ ripDaddy69 মনে হচ্ছে এটি অবৈধ JSON। এটি কুঁচকে বন্ধনী দ্বারা বেষ্টিত মূল-মান জুটিগুলি প্রত্যাশা করে। এরকম কিছু চেষ্টা করুন {"Fat cat":"meow"}
ফিল

2
@ ফিল এটি কোনও বৈধ জাভা স্ট্রিং অ্যাসাইনমেন্ট বলে মনে হচ্ছে না। আমি বুঝতে পারছি না আমি আলাদাভাবে কী করছি যদিও JSONObject obj = নতুন JSONObject ("ফ্যাট বিড়াল": "মীও"); আমি এটি বুঝতে পেরেছি, আমার দরকার ছিল the উদ্ধৃতিগুলির সামনে, এবং তারপরে পুরো জিনিসটির চারপাশে প্রকৃত উদ্ধৃতি। ধন্যবাদ।

31

এটির কাজ

    String json = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";

    try {

        JSONObject obj = new JSONObject(json);

        Log.d("My App", obj.toString());
        Log.d("phonetype value ", obj.getString("phonetype"));

    } catch (Throwable tx) {
        Log.e("My App", "Could not parse malformed JSON: \"" + json + "\"");
    }

1
যদিও এটি প্রশ্নের উত্তর দেয় তবে এটি কেন বা কীভাবে কাজ করে তা ব্যাখ্যা করে না। দয়া করে এ জাতীয় ব্যাখ্যা যুক্ত করুন।
সেরিব্রালফার্ট

এটি একটি সহজ কোড সমাধান বলে মনে হচ্ছে, এর জন্য অন্য একটি অবজেক্ট তৈরি করা দরকার যা পালানোর ক্রমটি পরিচালনা করে।
কেলালাকা

7

এটা চেষ্টা কর:

String json = "{'phonetype':'N95','cat':'WP'}";

2
স্ট্রিংটি JSON অবজেক্টের অ্যারে হলে কী হবে? "[{}, {}, {}]" এর মতো
ফ্রান্সিসকো করলালেস মোরেলস

এটা একটা ভালো বুদ্ধি. একক উদ্ধৃতি কাজ করে এবং এটি পালানোর অক্ষরের প্রয়োজনীয়তা দূর করে।
ডেভিড এম লী

1
অ্যাপোস্ট্রোফ জাভাতে কাজ করতে পারে, তবে এটি কঠোর আইনী JSON নয়। সুতরাং আপনার অন্যান্য ভাষা বা পরিস্থিতিগুলিতে জিনিসগুলি আলাদাভাবে করার প্রয়োজন হতে পারে।
জেসি চিশলম

4

একটি স্ট্রিং থেকে একটি JSONObject বা JSONArray পেতে আমি এই শ্রেণিটি তৈরি করেছি:

public static class JSON {

     public Object obj = null;
     public boolean isJsonArray = false;

     JSON(Object obj, boolean isJsonArray){
         this.obj = obj;
         this.isJsonArray = isJsonArray;
     }
}

এখানে JSON পেতে:

public static JSON fromStringToJSON(String jsonString){

    boolean isJsonArray = false;
    Object obj = null;

    try {
        JSONArray jsonArray = new JSONArray(jsonString);
        Log.d("JSON", jsonArray.toString());
        obj = jsonArray;
        isJsonArray = true;
    }
    catch (Throwable t) {
        Log.e("JSON", "Malformed JSON: \"" + jsonString + "\"");
    }

    if (object == null) {
        try {
            JSONObject jsonObject = new JSONObject(jsonString);
            Log.d("JSON", jsonObject.toString());
            obj = jsonObject;
            isJsonArray = false;
        } catch (Throwable t) {
            Log.e("JSON", "Malformed JSON: \"" + jsonString + "\"");
        }
    }

    return new JSON(obj, isJsonArray);
}

উদাহরণ:

JSON json = fromStringToJSON("{\"message\":\"ciao\"}");
if (json.obj != null) {

    // If the String is a JSON array
    if (json.isJsonArray) {
        JSONArray jsonArray = (JSONArray) json.obj;
    }
    // If it's a JSON object
    else {
        JSONObject jsonObject = (JSONObject) json.obj;
    }
}

আপনি কেবল JSON স্ট্রিংয়ের প্রথম চরিত্রটি পরীক্ষা করতে পারতেন এটি দেখতে [বা {এটি অ্যারে বা কোনও বস্তু কিনা তা জানতে। তারপরে আপনি উভয় ব্যতিক্রমকে ঝুঁকিপূর্ণ করবেন না, কেবল প্রাসঙ্গিক।
জেসি চিশলম

3

এই চেষ্টা করুন, শেষ পর্যন্ত এটি আমার জন্য কাজ করে:

//delete backslashes ( \ ) :
            data = data.replaceAll("[\\\\]{1}[\"]{1}","\"");
//delete first and last double quotation ( " ) :
            data = data.substring(data.indexOf("{"),data.lastIndexOf("}")+1);
            JSONObject json = new JSONObject(data);

3

আপনার নীচের মত কোডের লাইন প্রয়োজন:

 try {
        String myjsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
        JSONObject jsonObject = new JSONObject(myjsonString );
        //getting specific key values
        Log.d("phonetype = ", jsonObject.getString("phonetype"));
        Log.d("cat = ", jsonObject.getString("cat");
    }catch (Exception ex) {
         StringWriter stringWriter = new StringWriter();
         ex.printStackTrace(new PrintWriter(stringWriter));
         Log.e("exception ::: ", stringwriter.toString());
    }

0

এখানে কোডটি রয়েছে এবং আপনি সিদ্ধান্ত নিতে পারেন কোনটি
(সিঙ্ক্রোনাইজ করা) স্ট্রিংবফার বা দ্রুত স্ট্রিংবুডার ব্যবহার করতে হবে।

বেঞ্চমার্ক দেখায় স্ট্রিংবিল্ডার দ্রুততর।

public class Main {
            int times = 777;
            long t;

            {
                StringBuffer sb = new StringBuffer();
                t = System.currentTimeMillis();
                for (int i = times; i --> 0 ;) {
                    sb.append("");
                    getJSONFromStringBuffer(String stringJSON);
                }
                System.out.println(System.currentTimeMillis() - t);
            }

            {
                StringBuilder sb = new StringBuilder();
                t = System.currentTimeMillis();
                for (int i = times; i --> 0 ;) {
                     getJSONFromStringBUilder(String stringJSON);
                    sb.append("");
                }
                System.out.println(System.currentTimeMillis() - t);
            }
            private String getJSONFromStringBUilder(String stringJSONArray) throws JSONException {
                return new StringBuffer(
                       new JSONArray(stringJSONArray).getJSONObject(0).getString("phonetype"))
                           .append(" ")
                           .append(
                       new JSONArray(employeeID).getJSONObject(0).getString("cat"))
                      .toString();
            }
            private String getJSONFromStringBuffer(String stringJSONArray) throws JSONException {
                return new StringBuffer(
                       new JSONArray(stringJSONArray).getJSONObject(0).getString("phonetype"))
                           .append(" ")
                           .append(
                       new JSONArray(employeeID).getJSONObject(0).getString("cat"))
                      .toString();
            }
        }

0

নীচে হতে পারে ভাল।

JSONObject jsonObject=null;
    try {
        jsonObject=new JSONObject();
        jsonObject.put("phonetype","N95");
        jsonObject.put("cat","wp");
        String jsonStr=jsonObject.toString();
    } catch (JSONException e) {
        e.printStackTrace();
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.