标签: lift-json

使用Casbah将lift-json JValue转换为MongoDBObject?

我正在尝试将lift-json的JValue中的解析后的JSON文档转换为Casbah MongoDBObject - 有没有办法做到这一点?

mongodb casbah lift-json

5
推荐指数
1
解决办法
1278
查看次数

使用1个元素解析Json列表(Scala/liftweb)

我正在遇到一种情况,我从外部服务器检索一些Json(我对该服务器没有任何控制权).Json有一个元素可能会出现一次或多次.我正在尝试使用net.liftweb.json工具解析它,只有在元素出现多次时才能正常工作.如果元素只出现一次,则无法解析.

这是一些示例代码:

import net.liftweb.json._
import net.liftweb.json.JsonDSL._

case class JSonListIssue(foo: List[String])

class JSonTest extends TestCase {

  implicit val formats = net.liftweb.json.DefaultFormats; 

  def testJsonList {
    val jsonStr2Foos = "{\"foo\": \"bar\", \"foo\": \"bar2\"}"
    val json = (parse(jsonStr2Foos).extract[JSonListIssue]) 
    assertEquals(2, json.foo.size)

    val jsonStr1Foo = "{\"foo\": \"bar\"}"
    val json2 = (parse(jsonStr1Foo).extract[JSonListIssue]) // Results in Json MappingException
    assertEquals(1, json2.foo.size)
  }

}
Run Code Online (Sandbox Code Playgroud)

第二个解析语句在上面的代码中失败.如果我将如下定义case类,第二个解析将起作用,但第一个解析将失败.

    case class JSonListIssue(foo: String)
Run Code Online (Sandbox Code Playgroud)

关于如何以干净的方式解决这个问题的任何建议?我当然可以捕获MappingException,然后使用其他case类解析它,但那脏...

谢谢,Gero

json scala lift lift-json

5
推荐指数
1
解决办法
474
查看次数

在Scala中提取json

我有以下数据结构:

val jsonStr = """
     {
      "data1": {
        "field1": "data1",
        "field2": 1.0,
        "field3": true
      },
      "data211": {
        "field1": "data211",
        "field2": 4343.0,
        "field3": false
      },
      "data344": {
        "field1": "data344",
        "field2": 436778.51,
        "field3": true
      },
      "data41": {
        "field1": "data41",
        "field2": 14348.0,
        "field3": true
      }
    }
  """
Run Code Online (Sandbox Code Playgroud)

我想要提取它.这是我正在做的没有任何运气:

#1. 
case class Fields(field1: String, field2: Double, field3: Boolean)
json.extract[Map[String, Map[Fields, String]]]
//org.json4s.package$MappingException: Do not know how to convert JBool(true) 
//into class       java.lang.String

#2.
json.extract[Map[String, Map[String, Fields]]
//java.lang.InternalError: Malformed class name


#3.
json.extract[Map[String, Map[String, Any]]] …
Run Code Online (Sandbox Code Playgroud)

parsing json scala lift lift-json

3
推荐指数
1
解决办法
1万
查看次数

检查一个对象是否在json4s/lift-json中有一个字段

我有一些带有一些字段的json,我想检查它们中是否有一些存在.我正在提取值并针对JNothing测试它,但它太冗长了:

val json: JValue = ...

val jsonIsType1 = (json \ "field1") != JNothing && (json \ "field2") != JNothing
Run Code Online (Sandbox Code Playgroud)

是否有更紧凑的方法使用json4s/lift-json检查json对象中是否存在字段?理想情况如下:

val jsonIsType1 = json.has("field1") && json.has("field2")
Run Code Online (Sandbox Code Playgroud)

json scala lift-json json4s

3
推荐指数
1
解决办法
8260
查看次数

如何在没有case类的情况下解析JSON Scala

我有一个JSON,可以通过时间和使用的情况下更改类可能是unconvenient,因为我需要每次改变它的结构的JSON变化.

例如,如果我有这样的JSON:

val json= """{
  "accounts": [
  { "emailAccount": {
    "accountName": "YMail",
    "username": "USERNAME",
    "password": "PASSWORD",
    "url": "imap.yahoo.com",
    "minutesBetweenChecks": 1,
    "usersOfInterest": ["barney", "betty", "wilma"]
  }},
  { "emailAccount": {
    "accountName": "Gmail",
    "username": "USER",
    "password": "PASS",
    "url": "imap.gmail.com",
    "minutesBetweenChecks": 1,
    "usersOfInterest": ["pebbles", "bam-bam"]
  }}
  ]
}"""
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式访问它:

val parsedJSON = parse(json)
parsedJSON.accounts(0).emailAccount.accountName
Run Code Online (Sandbox Code Playgroud)

parsing json scala lift-json circe

2
推荐指数
1
解决办法
1436
查看次数

使用lift-json实例化基于json和元数据的类型

我想反序列化使用lift-json序列化的Scala案例类.我遇到的问题是,我不知道如何调用extractOpt[A]下面的泛型方法方法:

someString:String = {...}
JsonParser.parse(someString).extractOpt[A]
Run Code Online (Sandbox Code Playgroud)

类型[A]将取决于元数据,例如类名,[A]但对于我的生活,我无法弄清楚如何使用反射进行调用.在c#中我只能extractOpt[A]使用反射设置调用的泛型类型.我担心我的问题与Java类型擦除有关.

我将会有很多案例类,所以我真的想避免从{metadata} - > classOf []创建某种手工制作的地图.我可以完全控制与之关联的元数据someString.

如果它有助于理解为什么我有这个问题,我正在实现事件采购,而我所有的[A]类型将成为持久化事件.任何想法我能做什么?

java generics reflection scala lift-json

1
推荐指数
1
解决办法
227
查看次数

标签 统计

lift-json ×6

scala ×5

json ×4

lift ×2

parsing ×2

casbah ×1

circe ×1

generics ×1

java ×1

json4s ×1

mongodb ×1

reflection ×1