2017-03-20 3 views
0

Je dois désérialiser JSON avec des références circulaires. La première occurrence d'un objet a:Comment désérialiser des références circulaires (sérialisées par Newtonsoft.Json) avec Jackson?

"$id":"1" 

Les références ressemblent:

{"$ref":"1"} 

Avec @JsonIdentityInfo je peux faire le $ id lisible mais Jackson ne lirai pas les références. Si je supprime manuellement le contenu "$ ref", la désérialisation fonctionne et seule la clé de référence est incluse dans la chaîne JSON.

Comment faire pour que Jackson gère les références dans le style "$ ref"?

Répondre

0

J'ai essayé mon propre désérialiseur mais cela semble être beaucoup trop compliqué pour ce problème assez simple.

La classe que je veux désérialiser obtient:

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="$id") 

Je prends toute la chaîne JSON et remplacer les choses ref par regexp.

String regex = "\\{\\\"\\$ref\\\":\\\"(\\d{1,})*\\\"\\}"; 
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL); 

Matcher matcher = pattern.matcher(jsonString); 
String resultString=""; 
if (matcher.find()) 
{ 
    resultString = matcher.replaceAll("$1"); 
} 

Remplacer la chaîne ne prend presque pas de temps.