You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:56:58