Android Java中JSON数据解析与格式转换问题求助
解决Android Java中嵌套转义JSON的解析问题
嘿,这个问题我熟!你遇到的是典型的嵌套JSON字符串被转义包裹的情况——外层JSON里的date字段值不是直接的JSON对象,而是一个被引号和转义符包裹的JSON字符串。咱们一步步来搞定它:
下面是完整的修正代码,直接替换你原来的片段就行:
String jsonStr = sh.makeServiceCall(url); Log.e("RAW-JSON: ","Retrieve RAW-Json is "+jsonStr); if (jsonStr != null) { try { // 1. 先解析外层的JSON对象 JSONObject outerJson = new JSONObject(jsonStr); // 2. 取出date对应的转义字符串(注意这里是getString,不是getJSONObject) String dateJsonStr = outerJson.getString("date"); Log.e("DATE-JSON-STR: ", "Extracted date string: " + dateJsonStr); // 3. 将转义后的字符串二次解析成嵌套的JSONObject JSONObject dateJson = new JSONObject(dateJsonStr); // 4. 现在就能直接提取各个日期字段了 String yesterday = dateJson.getString("yesterday"); String today = dateJson.getString("today"); String tomorrow = dateJson.getString("tomorrow"); // 打印测试结果,验证解析是否成功 Log.e("PARSED-DATE: ", String.format("Yesterday: %s, Today: %s, Tomorrow: %s", yesterday, today, tomorrow)); } catch (JSONException e) { e.printStackTrace(); Log.e("JSON-PARSE-ERROR", "解析失败原因: " + e.getMessage()); } }
关键步骤说明:
- 外层解析:先把整个原始JSON转成
JSONObject,这一步和你原来的操作一致。 - 取出转义字符串:用
getString("date")拿到被转义的JSON内容(也就是"{\"yesterday\":\"Wed 28\",\"today\":\"Thu 29\",\"tomorrow\":\"Fri 30\"}"),这一步不能直接用getJSONObject,因为它现在还是字符串类型。 - 二次解析:把这个字符串传入
JSONObject构造方法,就能得到你想要的嵌套结构{"yesterday":"Wed 28", "today":"Thu 29", "tomorrow":"Fri 30"}。 - 提取字段:现在就可以从
dateJson里直接获取各个日期字段的值了。
小提醒:
- 务必捕获
JSONException,不管是外层还是二次解析,都可能因为JSON格式错误抛出异常。 - 如果接口返回的
date字段可能为空,记得先加非空判断,避免空指针问题。
内容的提问来源于stack exchange,提问作者Trusted
相关产品推荐
相关产品推荐

