从字符串转换为json对象android

sar*_*ath 94 android json string-conversion jsonexception

我正在开发一个Android应用程序.在我的应用程序中,我必须将字符串转换为Json对象,然后解析值.我在stackoverflow中检查了一个解决方案,并在此处找到了类似的问题链接

解决方案是这样的

       `{"phonetype":"N95","cat":"WP"}`
        JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
Run Code Online (Sandbox Code Playgroud)

我在代码中使用相同的方法.我的字符串是

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

string mystring= mystring.replace("\"", "\\\"");
Run Code Online (Sandbox Code Playgroud)

更换后我得到了结果

{\"ApiInfo\":{\"description\":\"userDetails\",\"status\":\"success\"},\"userDetails\":{\"Name\":\"Sarath Babu\",\"userName\":\"sarath.babu.sarath babu\",\"Token\":\"ZIhvXsZlKCNL6Xj9OPIOOz3FlGta9g\",\"userId\":\"118\"},\"pendingPushDetails\":[]}
Run Code Online (Sandbox Code Playgroud)

当我执行 JSONObject jsonObj = new JSONObject(mybizData);

我得到以下json异常

org.json.JSONException: Expected literal value at character 1 of
Run Code Online (Sandbox Code Playgroud)

请帮我解决我的问题.

Phi*_*hil 203

删除斜杠:

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 + "\"");
}
Run Code Online (Sandbox Code Playgroud)

  • 如果字符串是JSON对象数组怎么办?喜欢 ”[{},{},{}]” (3认同)
  • @FranciscoCorralesMorales你可以使用`JSONArray obj = new JSONArray(json);`.然后你可以使用*for-loop*迭代数组. (3认同)
  • @FranciscoCorralesMorales只使用*try-catch*块.如果一个失败,则假设另一个. (2认同)
  • @Phil这似乎不是一个有效的java字符串赋值.虽然JSONObject obj = new JSONObject("Fat cat":"meow"),但我不明白我在做什么.我想通了,我需要使用引号的前面,然后围绕整个事情的实际引用.谢谢. (2认同)

小智 20

这是工作

    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 + "\"");
    }
Run Code Online (Sandbox Code Playgroud)


小智 7

试试这个:

String json = "{'phonetype':'N95','cat':'WP'}";
Run Code Online (Sandbox Code Playgroud)

  • 如果字符串是JSON对象数组怎么办?喜欢 "[{},{},{}]" (2认同)

Ben*_*Ben 7

您只需要如下代码行:

   try {
        String myjsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
        JSONObject jsonObject = new JSONObject(myjsonString );
        //displaying the JSONObject as a String
        Log.d("JSONObject = ", jsonObject.toString());
        //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());
    }
Run Code Online (Sandbox Code Playgroud)


Ric*_*oCh 5

为了从字符串中获取 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;
     }
}
Run Code Online (Sandbox Code Playgroud)

这里获取 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);
}
Run Code Online (Sandbox Code Playgroud)

例子:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)


mhK*_*ami 5

试试这个,最后这对我有用:

//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);
Run Code Online (Sandbox Code Playgroud)