JwtBuilder将\添加到我的Json字符串中-Java

JwtBuilder将\添加到我的Json字符串中-Java,java,json,jackson,jwt,Java,Json,Jackson,Jwt,我有一个JSON字符串(由Jackson制作,用于转换对象): 我必须把这个字符串放在JWT声明的一个名为“DATI”的自定义字段中。我使用: JwtBuilder MY_JwtBuilder = Jwts.builder() .setIssuedAt( new Date() ) .setIssuer("Fausto") .setSubject("Ciao") .cla

我有一个JSON字符串(由Jackson制作,用于转换对象):

我必须把这个字符串放在JWT声明的一个名为“DATI”的自定义字段中。我使用:

JwtBuilder MY_JwtBuilder = Jwts.builder()
                .setIssuedAt( new Date() )
                .setIssuer("Fausto")
                .setSubject("Ciao")
                .claim("DATI", my_JSON_String ) 
                .signWith(SignatureAlgorithm.HS256, "DonalDuck");
String JWT=  MY_JwtBuilder.compact();
如果我将JWT放入测试,我会得到以下字符串:

{
  "iat": 1537026243,
  "iss": "Fausto",
  "sub": "Ciao",
  "DATI": "{\"id\":-1,\"id_contratto\":1,\"datetime_inizio\":\"2018-09-15 17:44:02\",\"datetime_fine\":null,\"numero_chiamate_individuali\":-1,\"minuti_totali_chiamate_individuali\":1421,\"numero_chiamate_gruppo\":3027,\"minuti_totali_chiamate_gruppo\":-1,\"numero_messaggi_individuali_testo\":-1,\"numero_messaggi_individuali_multimediali\":-1,\"numero_messaggi_gruppo_testo\":-1,\"numero_messaggi_gruppo_multimediali\":-1,\"numero_eventi_inviati\":-1,\"numero_interventi_creati\":-1,\"enabled\":false}",
  "exp": 1537029843
}
为字段DATI内的每个引号添加了\号。这是网站方面的一个问题。 如何避免添加\

谢谢,Fausto

您可以将
字符串#replaceAll()
^\“|\”$

例如


这里的问题是,您已经从DATI对象创建了一个字符串。 JWTBuilder将其视为字符串,并用
\
转义内部的

不要自己创建JSON字符串,而是创建一个JSON对象并将该对象作为参数传递给
claim
,让
JWTBuilder
处理该对象的正确序列化, e、 g:

JSONObject datiClaim=新JSONObject();
datiClaim.put(“id”,-1);
datiClaim.put(“id_contatto”,1);
...
JwtBuilder MY_JwtBuilder=Jwts.builder()
.setIssuedAt(新日期())
.setIssuer(“Fausto”)
.setSubject(“Ciao”)
.索赔(“DATI”,datiClaim)
....

JWT是加密的,类似于“2.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2YXRl…““加密字符串中的替换没有任何意义。@benjamin c可能是,您可以在这里提供帮助吗?我认为第一行不可能是您的真实代码,那不是字符串。我猜您是使用
JSONObject.getString()
或类似内容生成的,或者您忽略了所包含的
”“
,对吗?!我会尝试,但在本例中我有另一个问题:有没有办法通过泛型对象创建JSONObject?我的意思是,我必须在JWT中发送的对象可以包含不同的类。有办法吗?例如,我通过Jackson库从一个任意对象开始获取Json字符串。。。为了创建一个JSON对象,我可以做同样的事情吗?无论如何,除了我评论中的其他问题,你的解决方案是有效的!!!根据
声明的第二个参数
可以是任何类型的
对象
,因此基本上您甚至不需要
JSONObject
,但可以直接传递任何其他对象类型。@jps这是真的,谢谢您的评论。无需将其转换为json,它接受任何Java对象。
{
  "iat": 1537026243,
  "iss": "Fausto",
  "sub": "Ciao",
  "DATI": "{\"id\":-1,\"id_contratto\":1,\"datetime_inizio\":\"2018-09-15 17:44:02\",\"datetime_fine\":null,\"numero_chiamate_individuali\":-1,\"minuti_totali_chiamate_individuali\":1421,\"numero_chiamate_gruppo\":3027,\"minuti_totali_chiamate_gruppo\":-1,\"numero_messaggi_individuali_testo\":-1,\"numero_messaggi_individuali_multimediali\":-1,\"numero_messaggi_gruppo_testo\":-1,\"numero_messaggi_gruppo_multimediali\":-1,\"numero_eventi_inviati\":-1,\"numero_interventi_creati\":-1,\"enabled\":false}",
  "exp": 1537029843
}
String JWT = MY_JwtBuilder.compact().replaceAll("^\"|\"$", "");