java - 通过 JJWT 解密 JSON 字符串并删除引号 -Java

标签 java json jackson jwt jjwt

我的网站将 JWT(内置 php)发送到我用 Java 开发的应用程序。

JWT 在名为 DATI 的自定义字段中包含一个 JSON 字符串。 我使用 JJWT 库来解密 DATI 字段中包含的字符串:

Claims MY_CLAIMS = Jwts.parser().setSigningKey(SECRET_KEY__Byte).parseClaimsJws(STRING_JWT).getBody(); 
ArrayList ARRAY = MY_CLAIMS .get("DATI", ArrayList.class);
String DECODED_STRING_INSIDE_DATI =String.valueOf(ARRAY);

我以正确的方式获取字符串“DECODED_STRING_INSIDE_DATI”(即 JSON 字符串),但由于某种原因引号 (") 被删除:

[{id=3, id_rivenditore=-1, id_cliente=-1, ip_address=192.168.1.6, nome=DonalDuck, note=ByBye, enabled=1}]

我在“https://jwt.io/ ”中测试了 STRING_JWT,并且我正确地得到了引号:

{
  "iss": "www.mySite.it",
  "exp": 1536913435,
  "sub": "WebApp",
  "DATI": [
    {
      "id": "3",
      "id_rivenditore": "-1",
      "id_cliente": "-1",
      "ip_address": "192.168.1.6",
      "nome": "DonalDuck",
      "note": "ByBye",
      "enabled": "1"
    }
  ]
}

我真的不知道如何解决这个问题,因为我无法以正确的方式读取 JSON 字符串。我使用 jackson 库读取 Json 字符串

最佳答案

这可能会有所帮助,

您已经拥有包含所需声明的 ArrayList

ArrayList ARRAY = MY_CLAIMS.get("DATI", ArrayList.class);

要获取此 ArrayList 中包含的声明的 JSON 字符串,请尝试以下代码。

ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(out, ARRAY);
byte[] data = out.toByteArray();
String str = new String(data);

str 包含格式正确的 JSON 字符串(带引号)。

关于java - 通过 JJWT 解密 JSON 字符串并删除引号 -Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318182/

相关文章:

json - 如何为多线图数据定义json

java - 在java中重新格式化JSON数组/对象

java - 带有 @JsonProperty defaultValue 处理的 Jackson 模块

java - 在 Activity 之间使用 SharedPreferences

java - 使用 Java 数据库

javascript - JSON 中空与空的约定是什么?

java - 将 json 转换为对象

java - 使用 Java 进行系统事件处理

java - Java Applet 中的paint 和draw 方法有什么区别?

json - 如何根据其他下拉选项加载本地Json到Flutter DropDown?