通过JJWT解密JSON字符串删除引号-Java
Posted
技术标签:
【中文标题】通过JJWT解密JSON字符串删除引号-Java【英文标题】:Decripting by JJWT a JSON String removed quotation marks -Java 【发布时间】:2019-02-18 10:52:16 【问题描述】:我的网站将 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 String
【问题讨论】:
你能举个例子吗? 你是如何解码令牌的? 您好在问题文本中添加了代码和示例 @Maruthi Adithya 示例发布 @benjamin c 代码来解码发布的令牌 【参考方案1】:这可能会有所帮助,
您已经有 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 字符串(带引号)。
【讨论】:
@Fausto70 并考虑使用 java 命名约定来命名变量 :)以上是关于通过JJWT解密JSON字符串删除引号-Java的主要内容,如果未能解决你的问题,请参考以下文章
如何删除 jq 输出中的双引号以在 bash 中解析 json 文件?