我曾在AWS LAMBDA的函数:
def test(pj: Pojo, context: Context): java.util.List[Document]
这是不进行初始化与输入的JSON值在所有pj
。
我发现在斯卡拉做AWS LAMBDA这样的another way:
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
val scalaMapper = new ObjectMapper().registerModule(new DefaultScalaModule)
def test(input: InputStream, output: OutputStream): Unit = {
val inputPojo = scalaMapper.readValue(input, classOf[Pojo])
val answer: Seq[Document] = getTheRealAnswer(inputPojo)
val jsonStr = "{ frustration: \"I wish my answer was JSON.\" }"
output.write(jsonStr.getBytes("UTF-8"))
}
而这样的作品,除了我真想回到作为一个答案是文档的JSON数组。我应该如何着手呢?
编辑:在我原来的帖子,我写道:“[第一例]被返回答案错误22.基本上AWS处理列表[文件]作为文件名的JSON转换(我认为),JSON有很多冒号和错误22没有被允许。奇怪的文件名冒号来了“。这竟然是我从AWS CLI的AWS lambda函数的调用错误。我省略在命令调用输出文件名,并返回JSON用AWS CLI解释为一个文件名。
自从我写了这个消息,我有这样的事情的工作:
def jsonizeDocs(cDocument: Seq[Document]): String = {
val sb=new StringBuilder
for (doc <- cDocument) {
if (sb.nonEmpty) {
sb.append(",")
}
sb.append(doc.toJson)
}
sb.toString
}
注意!这个答案是基于光包装我身边json4s写的,我称之为JSON Extensions
假设你正在使用Scala的对象,导入io.onema.json.Extensions._
import io.onema.json.Extensions._
case class Doc(title: String, content: String)
val listOfDocs = Seq(Doc("Foo", "bar"), Doc("Bar", "Baz"), Doc("Blah", "Bax"))
val json: String = listOfDocs.asJson
println(json)
// [{"title":"Foo","content":"bar"},{"title":"Bar","content":"Baz"},{"title":"Blah","content":"Bax"}]
现在,因为你正在使用一个POJO,你需要导入io.onema.json.JavaExtensions._
。假设你有以下POJO:
public class Document {
private String title;
private String content;
public String getTitle() {return title;}
public String getContent() {return content;}
public void setTitle(String title) { this.title = title;}
public void setContent(String content) {this.content = content;}
}
在Scala代码像这样使用此方法:
import io.onema.json.JavaExtensions._
import com.example.Document
// ...
def jsonizeDocs(cDocument: Seq[Document]): String = {
val json: String = cDocument.asJson
println(json)
json
}
在AWS拉姆达(和周围走另一条路)使用jsonDecode
和自定义对象映射到反序列化到预期的类型:
import io.onema.json.JavaExtensions._
import io.onema.json.Mapper
import com.example.Document
val jsonString = """[{"title":"Foo","content":"bar"},{"title":"Bar","content":"Baz"},{"title":"Blah","content":"Bax"}]"""
val mapper: ObjectMapper = Mapper.allowUnknownPropertiesMapper
val doc: Document = jsonString.jsonDecode[Document](mapper)
我用在这里拉姆达框架,能够反序列化AWS拉姆达事件以及自定义类型,看到simple example here相当成功所描述的方法。
而已!你可以使用这个库或Java或Scala中的许多JSON序列化的一个。如果你知道你的对象的类型,大多数图书馆将使您序列化JSON和背部很容易。