【问题标题】:Getting org.json.JSONEXCEPTION: Unteterminated object at character when decoding token获取 org.json.JSONEXCEPTION:解码令牌时字符处的未确定对象
【发布时间】:2019-11-23 12:50:27
【问题描述】:

所以当我使用来自 import org.apache.commons.codec.binary.Base64 的方法 Base64.decodeBase64() 时,我试图在我的 android 应用程序中解码 JWT 令牌;
当我打印从解码令牌获得的字符串时,我在字符串“������”的末尾得到这些字符,而实际上应该是“}}”

代码如下:

String token = loadFromCache("token");
String[] split_String = token.split("\\.");
String base64EncodedBody = split_String[1];
System.out.println("BASE64 Body: " + base64EncodedBody);
String body = new String(Base64.decodeBase64(base64EncodedBody.getBytes()));
System.out.println("BODY: " + body);
try {
    JSONObject jsonObject = new JSONObject(body).getJSONObject("employee");
} catch (JSONException e) {
    e.printStackTrace();
}

令牌是有效的,而且我确实得到了几乎所有正确的值。只是它以字符 ������ 而不是 }} 结尾。任何帮助表示赞赏

【问题讨论】:

  • 你为什么要坚持使用apache Base64
  • 我并不坚持使用它,但它是我用得最远的一个。尝试使用 androids 的 Base64,但没有让我走那么远,所以我只使用了 apache,但我确实找到了替代解决方案。
  • 您是否尝试过 String body = new String(Base64.decode(base64EncodedBody.getBytes(Charset.forName("UTF-8")), Base64.NO_WRAP), Charset.forName("UTF-8")); 使用您自己想要的标志和编码?
  • 成功了(竖起大拇指)
  • 很好,很高兴为您提供帮助。

标签: java android json base64 decode


【解决方案1】:

使用 Android 的 Base64 类:

String body = new String(Base64.decode(base64EncodedBody.getBytes(Charset.forName("UTF-8")), Base64.NO_WRAP), Charset.forName("UTF-8"));

使用您自己的 Base64 标志和编码。

【讨论】:

    【解决方案2】:

    使用“import com.auth0.android.jwt.JWT;”的替代解决方案

    return new JWT(loadFromCache("token")).getClaim("employee").asObject(Employee.class);
    

    这会将声明“员工”作为 Employee 对象返回,因此我可以使用 getter 来获取值。
    示例:employee.getId() 等。

    注意:loadFromCache 方法只返回其键指定的值。这里我想要键“token”定义的值。

    【讨论】:

      猜你喜欢
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2021-04-23
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      相关资源
      最近更新 更多