【问题标题】:Why do I get "$outer" In my json string when using lift-json?为什么我在使用 lift-json 时在我的 json 字符串中得到“$outer”?
【发布时间】:2017-03-03 18:02:56
【问题描述】:

让我先说我是使用 json 和序列化等的新手。我正在尝试从某些案例类中创建一些 json。这是我正在使用的 scala 工作表中的代码:

import net.liftweb.json.DefaultFormats
import net.liftweb.json.Serialization.write
implicit val formats = DefaultFormats

// DBObjectTypes is an enumeration not shown in this snippet.
def update(dbObject: DBObjectTypes, updatePair: Map[String, Any]): Unit = {

  case class Query(objectType: String, id: String, version: Long)
  case class Update($set: Map[String, Any])
  case class QueryUpdate(query: Query, update: Update)
  val queryUpdate = QueryUpdate(Query(dbObject.toString, "test", 1L), Update(updatePair))
  val updateJson = write(queryUpdate)
  println(updateJson)
}
// SRAsubmission is an enumeration not show in this code snippet
update(SRAsubmission, Map("Desc" -> "Foo"))

这会产生以下 JSON:

{"$outer":{},"query":{"$outer":{},"objectType":"SRAsubmission","id":"test","version":1},"update":{"$outer":{},"$set":{"Desc":"Foo"}}}

想要的如下:

{"query":{"objectType":"SRAsubmission","id":"test","version":1},"update":{"$set":{"Desc":"Foo"}}}

我不明白为什么我得到 $outer: {} json 元素。我很确定这可能是我不理解但无法在 StackOverflow 或 Google 上找到任何答案的基本问题。提前感谢您的帮助!

【问题讨论】:

    标签: json scala lift-json


    【解决方案1】:

    将您的案例类定义移到 def 之外。 外部是对它们重新定义的类的实例的引用。

    【讨论】:

    • 不幸的是,这不起作用。我尝试将函数本身包含在它自己的对象中,并在对象外部定义案例类,我在 json 中的 $outer 文本遇到了同样的问题。
    【解决方案2】:

    +1 克里斯托夫

    我也有这个问题,将我的案例类移出我的逻辑类。

    import ...
    class clsMakeJsonFile {...}
    
    
    //Case classes
    case class humanBeing(height: Int, name: String, isSuperHuman: Boolean)
    case class parents(names: String, nationality: String, isAlive: Boolean)
    case class children(count: Int, names: String, canCode: Boolean)
    

    【讨论】:

      【解决方案3】:

      你的案例类应该在对象和主类之间,否则你会得到外部。你也应该从主类调用方法。还添加了隐式声明。尝试这样,如果您有任何问题,请告诉我。

      注意:我没有测试过这段代码。

      object AdvJson {
      
        case class Query(objectType: String, id: String, version: Long)
        case class Update($set: Map[String, Any])
        case class QueryUpdate(query: Query, update: Update)
      
        def main(args: Array[String]) {
      
          update(SRAsubmission, Map("Desc" -> "Foo"))
      
          def update(dbObject: DBObjectTypes, updatePair: Map[String, Any]): Unit = {
      
            implicit val format = DefaultFormats
            val queryUpdate = QueryUpdate(Query(dbObject.toString, "test", 1L), Update(updatePair))
            val updateJson = write(queryUpdate)
            println(updateJson)
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多