我想读取一个JSON文件并创建一个类/对象,它保存每个JSON的向量/记录中的所有标签和值。然后我想修改一些值(或JSON结构)并使用play / spark / scala将此修改后的JSON文件发送到Http请求。
那么如何用json的值填充我的类的变量?
例如,我有这个JSON文件
[
{
"ser": 345,
"City": "New York",
"Gen": 1
},
{
"ser": 55,
"City": "New York",
"Gen": 2
},
{
"ser": 19,
"City": "New York",
"Gen": 3
}
]
我的目标是创建一个像这样的类
class Book(ser:Integer, city:String, Gen:Integer)
{
//TODO
}
从json中获取文件中所有记录的ser,city和gen的每个值。 比我想修改json的结构或值,保存并用新文件回答Http请求。
答案 0 :(得分:2)
假设你有这门课程
case class Book(ser: Int, city: String, gen: Int)
您可以通过实现格式化程序,使用Play的JSON序列化/反序列化来执行JSON转换:
implicit val bookFormat: Format[Book] = {
((JsPath \ "ser").format[Int] and
(JsPath \ "City").format[String] and
(JsPath \ "Gen").format[Int]
) (Book.apply, unlift(Book.unapply))
}
// returns a sequence of Book objects
val books = Json.parse(bookJson).as[Seq[Book]]
// modify your books...
(...)
// convert back to Json
val json = Json.toJson(books)
答案 1 :(得分:0)
如果您没有为项目添加更多依赖项,因为您已经在使用Play,您应该查看Play's json serialization / deserialization capabilities
答案 2 :(得分:0)
好的,现在我创建了一个采用json的类(使用format方法)。我有seq,我可以做这样的事情:
books(9).city //return the city's value of the seq Book in 9 position of the seq
好的,现在我想用这个结构创建一个新的Json:
[ { "label": [1,2,3] //that is the Gen value,
"values": [
{ "label":"New York"
"values":["200","10","66"] //is the ser about all Gen (for example 200 is ser is for label/gen 1 .. 10 is for label/gen 2 etc.
},
{ "label":"London"
"values":["500","150","46"]
},
{ "label":"London"
"values":["500","150","46"]
},
.
.
.
.
.
]
}
]
这与JSON输入的结构不同。我认为创建这个新类可能会有所帮助:
class New_book(
label_gen:List[String],
values_gen:List[Libri],
label:String,
values:List[Int]
)
然后我想用这本书的seq填充这个新课(就是这样: “val books = Json.parse(JsonString).as [Seq [Libri]]”如果你还记得的话。)
在此之后,我将用spark来查询新的Json,然后回答Http请求。
我希望我现在明白了:D