Eu preciso criar uma string JSON, algo como isto:
[
{ 'id': 1, 'name': 'John'},
{ 'id': 2, 'name': 'Dani'}
]
val jArray = JsArray();
jArray += (("id", "1"), ("name", "John"))
jArray += (("id", "2"), ("name", "Dani"))
println(jArray.dump)
Eu preciso poder adicionar linhas ao jArray
, algo comojArray += ...
Qual é a biblioteca / solução mais próxima disso?
Respostas:
Infelizmente, escrever uma biblioteca JSON é a versão da comunidade Scala de codificar um aplicativo de lista de tarefas.
Há uma variedade de alternativas. Listo-os em nenhuma ordem específica, com notas:
💣 = não corrigiu vulnerabilidades de segurança, § = possui integração com Scalaz, ± = suporta interoperabilidade com Jackson
JsonNode
No Snowplow , usamos json4s com o back-end de Jackson; também tivemos boas experiências com o Argonaut.
fonte
O lift-json está na versão 2.6 e funciona muito bem (e também é muito bem suportado, o mantenedor está sempre pronto para corrigir qualquer erro que o usuário possa encontrar. Você pode encontrar exemplos usando-o no repositório do github
O mantenedor (Joni Freeman) está sempre acessível na lista de correspondência do Lift . Também existem outros usuários na lista de discussão que também são muito úteis.
Como o @Alexey aponta, se você quiser usar a biblioteca com outra versão do Scala, diga
2.11.x
, alterescalaVersion
e use da%%
seguinte maneira:Você pode verificar o site liftweb.net para descobrir a versão mais recente com o passar do tempo.
fonte
Sugiro usar jerkson , ele suporta as conversões de tipo mais básicas:
fonte
O número 7 da lista é Jackson, não usando Jerkson. Tem suporte para objetos Scala (classes de casos, etc.).
Abaixo está um exemplo de como eu o uso.
Isso torna muito simples. Além disso, é o XmlSerializer e o suporte para anotações JAXB é muito útil.
Esta postagem do blog descreve seu uso com as Anotações JAXB e o Play Framework.
http://krasserm.blogspot.co.uk/2012/02/using-jaxb-for-xml-and-json-apis-in.html
Aqui está o meu JacksonMapper atual.
fonte
Talvez eu tenha me atrasado um pouco, mas você realmente deve tentar usar a biblioteca json no play framework. Você pode olhar para a documentação . Na versão 2.1.1 atual, você não podia usá-lo separadamente sem o jogo inteiro 2, portanto a dependência será parecida com esta:
Ele trará a você toda a estrutura de jogo com todas as coisas a bordo.
Mas como eu sei, os caras da Typesafe têm um plano para separá-lo na versão 2.2. Portanto, existe o play-json independente do 2.2-snapshot.
fonte
Você deve verificar Genson . Apenas funciona e é muito mais fácil de usar do que a maioria das alternativas existentes no Scala. É rápido, possui muitos recursos e integrações com outras bibliotecas (jodatime, json4s DOM api ...).
Tudo isso sem nenhum código desnecessário sofisticado, como implícitos, leitores / gravadores personalizados para casos básicos, API ilisível devido à sobrecarga do operador ...
Usá-lo é tão fácil quanto:
Disclaimer: Eu sou o autor de Gensons, mas isso não significa que eu não sou objetivo :)
fonte
Aqui está uma implementação básica de gravação e leitura de
json
arquivos usandojson4s
.fonte
Jawn é uma biblioteca analisadora JSON muito flexível no Scala. Também permite a geração de ASTs personalizados; você só precisa fornecer uma pequena característica para mapear para o AST.
Funcionou muito bem em um projeto recente que precisava de um pouco de análise JSON.
fonte
O arrebatamento parece estar ausente na lista de respostas. Pode ser obtido em http://rapture.io/ e permite que você (entre outras coisas):
Não quero copiar / colar exemplos do Rapture da página. Uma bela apresentação sobre os recursos do Rapture foi feita por Jon Pretty no SBTB 2014: https://www.youtube.com/watch?v=ka5-OLJgybI
fonte
Resposta nº 7 da @ AlaxDean, Argonaut é o único que eu pude trabalhar rapidamente com sbt e intellij. Na verdade, o json4s também levou pouco tempo, mas lidar com um AST bruto não era o que eu queria. Eu consegui o argonaut trabalhar colocando uma única linha no meu build.st:
libraryDependencies += "io.argonaut" %% "argonaut" % "6.0.1"
E então um teste simples para ver se eu poderia obter JSON:
E depois
Verifique se você está familiarizado com a opção, que é apenas um valor que também pode ser nulo (acho que é seguro como nulo). O Argonaut faz uso do Scalaz, portanto, se você vê algo que não entende como o símbolo
\/
(uma operação), é provavelmente o Scalaz.fonte
Você pode tentar isso: https://github.com/momodi/Json4Scala
É simples e possui apenas um arquivo scala com menos de 300 linhas de código.
Existem amostras:
fonte
Eu uso o uPickle, que tem a grande vantagem de lidar com classes de casos aninhadas automaticamente:
Adicione isso ao seu
build.sbt
para usar o uPickle:fonte
Eu uso a biblioteca PLAY JSON, você pode encontrar o repositório mavn apenas para a biblioteca JSON, não para todo o quadro aqui
Tutoriais muito bons sobre como usá-los estão disponíveis aqui:
http://mandubian.com/2012/09/08/unveiling-play-2-dot-1-json-api-part1-jspath-reads-combinators/
http://mandubian.com/2012/10/01/unveiling-play-2-dot-1-json-api-part2-writes-format-combinators/
http://mandubian.com/2012/10/29/unveiling-play-2-dot-1-json-api-part3-json-transformers/
fonte
Deixe-me também dar a versão SON of JSON :
fonte
O Play lançou seu módulo para lidar com o JSON independentemente do Play Framework, Play WS
Fiz um post sobre isso, confira em http://pedrorijo.com/blog/scala-json/
Usando classes de caso e Play WS (já incluído no Play Framework), você converte caso entre json e case com um implemento simples de uma linha
fonte