我的网站将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字符串。我使用杰克逊库读取Json String
答案 0 :(得分: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字符串(带引号)。