स्ट्रिंग से json वस्तु Android में रूपांतरण


107

मैं एक Android एप्लिकेशन पर काम कर रहा हूं। मेरे ऐप में मुझे एक स्ट्रिंग को Json Object में बदलना है, फिर मानों को पार्स करें। मैंने स्टैकओवरफ़्लो में एक समाधान के लिए जाँच की और इसी तरह के मुद्दे को यहां लिंक मिला

समाधान इस तरह है

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

मुझे नीचे दिए गए json अपवाद मिल रहे हैं

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

कृपया मेरी समस्या को हल करने में मेरी मदद करें।


मुझे लगता है कि आपत्तिजनक चरित्र आपके प्रतिस्थापन के कारण एक बैकस्लैश है। आप वास्तव में ऐसा क्यों कर रहे हैं? JSON स्ट्रिंग कहाँ से आती है?
टिगुची

मैं के रूप में json html..not से स्ट्रिंग हो रही है
सरत

1
बस मिस्ट्रिंग हटाएं = mysteryring.replace ("\" "," \\\ ""); और देखें कि क्या यह आपके लिए काम करता है।
टिगुची

जवाबों:


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);। फिर आप सरणी के माध्यम से पुनरावृति करने के लिए for-loop का उपयोग कर सकते हैं ।
फिल

2
@FranciscoCorralesMorales बस एक कोशिश-पकड़ने ब्लॉक का उपयोग करें । यदि कोई विफल हो जाता है, तो दूसरे को मान लें।
फिल

1
@ ripDaddy69 ऐसा लगता है कि अमान्य JSON है। यह कर्ली कोष्ठक से घिरे कुंजी-मूल्य युग्मों की अपेक्षा करता है। कुछ ऐसा आजमाएं {"Fat cat":"meow"}
फिल

2
@Phil जो एक वैध जावा स्ट्रिंग असाइनमेंट प्रतीत नहीं होता है। मुझे समझ नहीं आ रहा है कि मैं क्या कर रहा हूं हालांकि JSONObject obj = new JSONObject ("मोटी बिल्ली": "म्याऊ"); मुझे यह पता चला, मुझे उद्धरणों के \ infront का उपयोग करने की आवश्यकता थी, और फिर पूरी बात के आसपास वास्तविक उद्धरण। धन्यवाद।

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 ऑब्जेक्ट्स की एक सरणी है? जैसे "[{}, {}, {}]"
फ्रांसिस्को कॉर्लेस मोरेल्स

यह एक अच्छा विचार है। एकल उद्धरण काम करता है और यह भागने वाले पात्रों की आवश्यकता को समाप्त करता है।
david m lee

1
Apostrophe JAVA में काम कर सकता है, लेकिन यह सख्त कानूनी 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

यहाँ कोड है, और आप तय कर सकते हैं कि
(सिंक्रनाइज़) StringBuffer या तेज StringBuilder का उपयोग करने के लिए।

बेंचमार्क से पता चलता है कि स्ट्रिंगबर्स्ट तेज़ है।

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();
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.