如何在JSON文件上解码base64编码的字符串

时间:2019-09-19 13:39:47

标签: java android json

我一直很难从编码的JSONObject中获取一些值以便对其进行解码。

server.json数据文件:

{
  "servers": [
    {
      "name": "Server 1",
      "domain": "157.230.228.67",
      "port": 465,
      "location": "ph",
      "http_server": "157.230.228.67",
      "http_port": 8000
    },
    {
      "name": "Server 2",
      "domain": "157.230.228.67",
      "port": 465,
      "location": "ph",
      "http_server": "10.199.212.2",
      "http_port": 8080
    }
  ],
  "payloads": [
    {
      "name": "Payload 1",
      "host": "IWdvb2dsZS5jb20="
    },
    {
      "name": "Payload 2",
      "host": "IWdvb2dsZS5jb20="
    },
    {
      "name": "Payload 3",
      "host": "IWdvb2dsZS5jb20="
    }
  ]
}

现在我只想使用jsonObject或JSONArray调用和解码(主机)值; 我的Mainactivity类的代码段;  这会将server.json加载到主要活动上。

server_file = FileUtility.readFileFromAssets(getAssets(), "servers.json"); // LOAD
        Log.e("List", "onCreate: " + server_file);






    JSONObject jsonObject = null;
            try {
                jsonObject = new JSONObject(server_file);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            JSONArray key = jsonObject.names();
            for (int i = 0; i <key.length() ; i++) {
                try {
                    String keys = key.getString(i);
                    String value = jsonObject.getString(keys);
                    byte[] decode = Base64.getDecoder().decode(value);
                    String showDecode = new String(decode, "UTF-8");
                } catch (JSONException e) {
                    e.printStackTrace();
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                try {
                    Log.d(TAG, "key: " + jsonObject.names().getString(i) + "value: " + jsonObject.get(jsonObject.names().getString(i)));
                } catch (JSONException e) {
                    e.printStackTrace();
                }

现在,我的主要问题是如何调用特定值(主机值),以便在将其用于我的主要活动之前对其进行base64解码。

+编码前主机的值是String数据类型。

2 个答案:

答案 0 :(得分:0)

让gson将其转换为对象/数据类(在kotlin中),您可能会受益。您可以通过自定义JsonDeserializer / JsonSerializer在创建base64时反序列化它。

答案 1 :(得分:0)

您可以使用以下命令获取编码的“主机”值:

JSONArray mArray;
        try {
            mArray = new JSONArray(responseString);
             for (int i = 0; i < mArray.length(); i++) {
                    JSONObject mJsonObject = mArray.getJSONObject(i);
                    Log.d("Host", mJsonObject.getString("host"));
                }
        } catch (JSONException e) {
            e.printStackTrace();
        }

然后您可以对其进行解码。