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

如何在Android中解码JSON文件里Base64编码的host字段

如何解码JSON中特定的Base64编码host值

我看了你的代码和需求,你现在的问题是没精准定位到payloads数组里的host字段,反而去遍历整个JSON的顶层键,这就导致你拿到payloads的时候直接当字符串处理,肯定会报错。而且你需要的是解码每个host值,咱们直接瞄准目标来就行,不用绕大弯。

正确的实现思路

咱们直接定位到payloads这个JSON数组,然后逐个遍历里面的对象,取出host字段进行解码:

  1. 从顶层JSONObject中获取payloads对应的JSONArray
  2. 循环遍历数组中的每个JSONObject
  3. 取出每个对象里的host字符串(这是Base64编码后的内容)
  4. 对host值进行Base64解码,得到原始字符串

修改后的代码片段

把你原来的循环部分替换成下面的代码就行,如果要在MainActivity启动前完成这个操作,建议把这段逻辑放到自定义Application类的onCreate方法里,或者用协程/异步任务(避免阻塞主线程):

// 加载完server_file并得到jsonObject之后
try {
    // 先获取payloads数组
    JSONArray payloadsArray = jsonObject.getJSONArray("payloads");
    for (int i = 0; i < payloadsArray.length(); i++) {
        // 拿到单个payload对象
        JSONObject payloadObj = payloadsArray.getJSONObject(i);
        // 获取Base64编码的host值
        String encodedHost = payloadObj.getString("host");
        // 解码
        byte[] decodedBytes = Base64.getDecoder().decode(encodedHost);
        String decodedHost = new String(decodedBytes, "UTF-8");
        // 打印解码后的值,或者做你需要的操作
        Log.d(TAG, "解码后的Host (" + (i+1) + "): " + decodedHost);
    }
} catch (JSONException e) {
    e.printStackTrace();
    Log.e(TAG, "解析JSON出错: " + e.getMessage());
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    Log.e(TAG, "编码转换出错: " + e.getMessage());
}

代码说明

  • jsonObject.getJSONArray("payloads"):直接精准获取到存储payload的数组,避免遍历无关的顶层键(比如你不需要的servers数组)
  • 循环里逐个取出每个payload对象,直接定位到host字段,这才是你真正需要处理的目标
  • 解码后的decodedHost就是原始的字符串,你可以把它存起来或者直接使用

另外,如果你确实要在MainActivity启动前完成这个操作,不建议在Activity的onCreate之前的生命周期方法(比如onAttach)里做,因为此时Activity还没完全初始化,最好的方式是自定义一个Application类,在它的onCreate里执行这段逻辑,这样APP启动时就会先完成解码操作:

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 在这里执行JSON加载和解码的逻辑
        try {
            String server_file = FileUtility.readFileFromAssets(getAssets(), "servers.json");
            JSONObject jsonObject = new JSONObject(server_file);
            JSONArray payloadsArray = jsonObject.getJSONArray("payloads");
            // 后续解码逻辑和上面一样
            for (int i = 0; i < payloadsArray.length(); i++) {
                JSONObject payloadObj = payloadsArray.getJSONObject(i);
                String encodedHost = payloadObj.getString("host");
                byte[] decodedBytes = Base64.getDecoder().decode(encodedHost);
                String decodedHost = new String(decodedBytes, "UTF-8");
                Log.d("MyApp", "预解码Host (" + (i+1) + "): " + decodedHost);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

记得在AndroidManifest.xml里的application标签指定android:name=".MyApp"哦。

内容的提问来源于stack exchange,提问作者Jamsakino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:58:47