Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中将映射转换为字符串中使用Lift JSON_Json_Scala_Lift_Lift Json - Fatal编程技术网

在Scala中将映射转换为字符串中使用Lift JSON

在Scala中将映射转换为字符串中使用Lift JSON,json,scala,lift,lift-json,Json,Scala,Lift,Lift Json,我正在使用Scala-我使用了JacksMapper它工作得很好, 代码在这里 import java.io.FileOutputStream import java.io.ObjectOutputStream import java.io.FileInputStream import java.io.ObjectInputStream import scala.util.Marshal import java.io.ByteArrayOutputStream import java.io.Pr

我正在使用Scala-我使用了JacksMapper它工作得很好, 代码在这里

import java.io.FileOutputStream
import java.io.ObjectOutputStream
import java.io.FileInputStream
import java.io.ObjectInputStream
import scala.util.Marshal
import java.io.ByteArrayOutputStream
import java.io.PrintWriter
import scala.util.parsing.json.JSONObject
import scala.util.parsing.json.JSON
import scala.util.parsing.json.JSONArray
import java.util.concurrent.atomic.AtomicReference
import scala.collection.mutable._
//import com.lambdaworks.jacks.JacksMapper
import java.io.BufferedReader
import java.io.FileReader
import net.liftweb.json._
import net.liftweb.json.JsonDSL._

import net.liftweb.json.JsonAST._
import net.liftweb.json.Extraction._
import net.liftweb.json.Printer._

//import com.codahale.jerkson.Json._

object jsonTest extends Serializable{

  def main(args: Array[String]): Unit = {

    var i = 1
    val map = new HashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any]

    while(i < 10000)
    {

    var in_list = List[Any]()
    in_list :+= "dummy"
    in_list :+= "dummy"
    in_list :+= "dummy"

    val in_map = HashMap[String,Any]()
    in_map("dummy"+i) = in_list

    var out_list = List[Any]()
    out_list :+= "cat1" 
    out_list :+= "hash1"
    out_list :+= 100
    out_list :+= (System.currentTimeMillis()/1000).toInt
    out_list :+= in_map

    map("dummy"+i) = out_list
    i = i + 1
    }

    val json = JacksMapper.writeValueAsString[scala.collection.immutable.Map[String,Any]](map.toMap)



    Some(new PrintWriter("foo.txt")).foreach{p => p.write(json); p.close}
    val t1 = System.currentTimeMillis()

    val br : BufferedReader = new BufferedReader(new FileReader("foo.txt"));
    val sb:StringBuilder = new StringBuilder();
      var line = br.readLine();

       while (line != null) {
           sb.append    (line);
           sb.append("\n");
           line = br.readLine();
       }
       val content = sb.toString();
       br.close()

       println(content.length())

    val obj = JacksMapper.readValue[scala.collection.immutable.Map[String,Any]](content)
       val obj = scala.collection.immutable.Map[String,Any]
    println(obj("dummy3"))
    println(System.currentTimeMillis() - t1)


  }

  }
import java.io.FileOutputStream
导入java.io.ObjectOutputStream
导入java.io.FileInputStream
导入java.io.ObjectInputStream
导入scala.util.Marshal
导入java.io.ByteArrayOutputStream
导入java.io.PrintWriter
导入scala.util.parsing.json.JSONObject
导入scala.util.parsing.json.json
导入scala.util.parsing.json.JSONArray
导入java.util.concurrent.AtomicReference
导入scala.collection.mutable_
//导入com.lambdaworks.jacks.JacksMapper
导入java.io.BufferedReader
导入java.io.FileReader
导入net.liftweb.json_
导入net.liftweb.json.JsonDSL_
导入net.liftweb.json.JsonAST_
导入net.liftweb.json.Extraction_
导入net.liftweb.json.Printer_
//导入com.codahale.jerkson.Json_
对象jsonTest扩展了可序列化{
def main(参数:数组[字符串]):单位={
变量i=1
val map=scala.collection.mutable.SynchronizedMap[String,Any]的新HashMap[String,Any]()
而(i<10000)
{
清单中的变量=清单[任何]()
列表中:+=“虚拟”
列表中:+=“虚拟”
列表中:+=“虚拟”
val in_map=HashMap[String,Any]()
in_映射(“虚拟”+i)=in_列表
var out_list=list[Any]()
输出列表:+=“cat1”
输出列表:+=“哈希1”
输出列表:+=100
输出列表:+=(System.currentTimeMillis()/1000).toInt
out_列表:+=in_映射
映射(“虚拟”+i)=输出列表
i=i+1
}
val json=JacksMapper.writeValueAsString[scala.collection.immutable.Map[String,Any]](Map.toMap)
一些(新的PrintWriter(“foo.txt”).foreach{p=>p.write(json);p.close}
val t1=System.currentTimeMillis()
val br:BufferedReader=new BufferedReader(new FileReader(“foo.txt”);
val sb:StringBuilder=新的StringBuilder();
var line=br.readLine();
while(行!=null){
某人追加(行);
某人附加(“\n”);
line=br.readLine();
}
val content=sb.toString();
br.close()
println(content.length())
val obj=JacksMapper.readValue[scala.collection.immutable.Map[String,Any]](内容)
val obj=scala.collection.immutable.Map[字符串,任意]
println(obj(“dummy3”))
println(System.currentTimeMillis()-t1)
}
}
但我正在尝试为scala使用Lift_Json。 请告诉我如何使用Lift_Json标记更改上述代码
我得到了Lift_Json的Jar文件,并进行了类似compact(render(Json))的简单解析。

这样的东西应该可以完成您想要做的事情。它将生成您的测试
Map
,然后将其序列化为
JSON
字符串并将其写入文件。下一步将把它读回,并将它提取到一个你可以从中读取的地图上——如上面的例子所示

import net.liftweb.json._
import java.io._

implicit val formats = net.liftweb.json.DefaultFormats

val map = {
  val mb = new scala.collection.mutable.HashMap[String, Any]()
  (1 to 10000).foreach { i =>
    val in_list = "dummy" :: "dummy" :: "dummy" :: Nil
    val in_map = Map("dummy%s".format(i) -> in_list)
    mb += "dummy%s".format(i) -> List("cat1", "hash1", 100, (System.currentTimeMillis()/1000).toInt, in_map) 
  }
  mb.toMap
}

val json = Extraction.decompose(map)

val jsonStrOut = Printer.pretty(JsonAST.render(json))
val fileName = "foo.txt"

val fw = new FileWriter(fileName)
fw.write(jsonStrOut)
fw.close()

val jsonStrIn = scala.io.Source.fromFile(fileName).mkString

val obj = parse(jsonStrIn).asInstanceOf[JObject].values
println(obj("dummy3"))

虽然这是可行的,但我强烈建议利用
case类
和其他Scala构造来帮助序列化和反序列化。Lift非常擅长处理这些物体。除非有理由在一个大地图中取消所有内容的类型化,否则从长远来看,我认为您将为自己省去很多麻烦。

线程“main”java.lang.NoClassDefFoundError中的异常:com/thoughtworks/paranamer/ParameterNamesNotFoundException位于net.liftweb.json.Extraction$.decompose(Extraction.scala:81)位于JsonLift$.main(JsonLift.scala:20)在JsonLift.main(JsonLift.scala)由以下原因引起:java.lang.ClassNotFoundException:com.thoughtworks.paranamer.ParameterNamesNotFoundException位于java.net.URLClassLoader$1.run(URLClassLoader.java:366)位于java.net.URLClassLoader$1.run(URLClassLoader.java:355)位于java.security.AccessController.doPrivileged(本机方法)在java.net.URLClassLoader.findClass(URLClassLoader.java:354)在java.lang.ClassLoader.loadClass(ClassLoader.java:423)在sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)在java.lang.ClassLoader.loadClass(ClassLoader.java:356)在java.net.net.net.URLClassLoader.findclassloader.findClass(urlcoader.java:354)在java:354)在sun.lang。