Sans bruit, JSON traitement avec Scala

Je suis issu d'une dotnet terre, mais ont récemment été à la recherche sur les possibilités de remplacement des langages de programmation. Rien de bien grave, juste quelques bribes ici et là. Récemment, j'ai découvert Scala et je suis assez fasciné par elle. En dépit de la non-déterministe de bricolage, j'ai fait quelques intermédiaires des contrôles de substance qui est important pour moi en C# et je me sens plutôt satisfait: fonctionnel notions - tique, ad-hoc polymorphisme - tique, annotations - tique, de réflexion et de codegen - tique.

Maintenant, je suis en train de réfléchir comment programmer un analogue de JSON bibliothèque de traitement, j'ai implémenté en C# 4.0 avec l'aide de DLR et "dynamique" sucre syntaxique. Voici l'ensemble des fonctionnalités, je suis à la recherche de:

  1. Pratique de la navigation et de la construction des premières JSON.
  2. Conversion automatique entre JSON natif et objets de collections (dans sa forme générale, le problème est insoluble, si l'on peut définir des conventions qui va travailler 95% du temps - et c'est très bien pour moi).

Nouvelles fonctionnalités de C# 4.0 plutôt rock ici, car ils me permettent de remplacer l'accès des membres et le type jette à effectuer complètement la logique personnalisée (si une variable en C# 4.0 est de type "dynamique", alors tout ce que vous faites avec il sera compilé dans les appels de programmeur-méthodes définies avec suffisamment de comportement par défaut - voir DynamicMetaObject.BindXXX méthodes à MSDN pour plus d'info). E. g. J'ai changé de type de moulages de sérialiser/désérialiser .NET les objets et membre accède à gérer les premières JSON, de sorte que je peux écrire le code suivant:

var json = Json.Get("http://some.service");
if (json.foo) Console.WriteLine((Foo)json.foo);
json.bars = ((List<Bar>)json.bars).DoSomething();

Bien sûr, ce n'est pas l'idéal, car de liaison dynamique en C# 4.0 a des problèmes avec les méthodes d'extension et de l'inférence de type, et, en outre, le code se sent encore assez lourd. Mais de toute façon, c'est beaucoup mieux que l'aide de tous ceux ((JsonObject)json["quux"])["baz"] j'ai utilisé en c# 3.5.

De la recherche fondamentale montre que la Scala n'a pas consacré la langue fonctionnalités qui prennent en charge la liaison tardive. Cependant, il y a tellement de trucs que peut-être ils peuvent être utilisés ensemble pour créer un supportable émulation du code montré ci-dessus (ou même d'être mieux - je suis presque sûr que c'est possible). Pourriez-vous, s'il vous plaît, conseillez-moi quelque chose ici?

OriginalL'auteur Eugene Burmako | 2010-11-01