0
votes

Comment convertir une carte en Json, où l'un des types est AnyRef

J'ai une carte qui est du type [string, anyref] . Comment puis-je le convertir en Json en utilisant Play-Json. J'ai trouvé des réponses mais elles avaient tous un type défini. Quand j'ai essayé de convertir, j'ai reçu le message d'erreur du compilateur comme:

Aucun argument implicite de type: écrit [String [String, AnyRef]] xxx

supposons que cette carte dispose des données suivantes: xxx

Donc, ma question est si j'ai la deuxième type Sur la carte, comment vais-je le convertir en Json en utilisant Just Play-Json?

Correction =>
Cette carte est obtenue à la suite du résultat de la recherche élastique. Je ne peux donc pas garantir que chaque fois que la carte sera la même, mais il sera du même type qui est, mapper [String, AnyRef]. >


0 commentaires

3 Réponses :


0
votes

Vous ne pouvez pas faire ça.

La chose la plus proche de anyref Vous pouvez avoir est play.api.libs.json.jsvalue .

ou en d'autres termes, vous avez besoin d'un JSON Structure de l'objet, dans lequel vous avez écrivains , resp. lecteurs .

laissez-moi savoir si vous avez besoin d'une explication plus poussée.


0 commentaires

1
votes

L'option la plus simple consiste à convertir toutes les valeurs à chaîne code> et à enregistrer cela.

val stringMap = testMap.mapValues(_.toString)


0 commentaires

2
votes

PLAY-JSON Essayez d'être aussi Typeafe que possible et cela signifie qu'il ne peut pas fournir implicitement sérialisé pour mappe [string, anyref] . Il pourrait ourdler d'autres sérialiseurs et ne pouvait pas s'assurer qu'il ne manquera pas. Vous pouvez créer le vôtre mais ce sera codé dur et vous ne devez pas la mettre dans vos globaux: xxx

mais gardez à l'esprit qu'il va exploser quand vous aurez un type non pris en charge. Carte. Je suppose que le meilleur moyen n'est pas de créer un écrivain implicite mais d'utiliser TOJSValue sur les arguments d'une carte, puis essayez de le sérialiser (comme dans le dernier printLn ).

Démo

Si c'était utile, Up-vote s'il vous plaît et marquez comme réponse.


2 commentaires

Merci de répondre. J'essaie d'aller chercher des résultats à partir de la recherche élastique qui ne retournera pas le nombre exact d'éléments dans la carte une fois la recherche échoue. Désolé j'ai oublié de l'ajouter dans ma question


Peu importe, je suppose. Plus important est de soutenir tous les types possibles que vous avez.