gpt4 book ai didi

json - 将 Json 数组反序列化为 Scala 对象

转载 作者:行者123 更新时间:2023-12-04 22:07:24 27 4
gpt4 key购买 nike

我在尝试将 JSON 数组反序列化为 Scala 对象时遇到了主要问题

      [{"name":"Cool","city":"College Park","address":"806","id":1},{"name":"Mars ","city":"Durham","address":"12","id":2},{"name":"Something","city":"Raleigh 
","address":"","id":3},{"name":"test","city":"","address":"","id":5}]

我尝试过 gson、jerkson(jackson scala 包装器)、sjson、flexjson。他们都没有工作。我这里有一份客户名单。列出[客户]。

这是我最接近的:
val array = new JsonParser().parse( customers ).getAsJsonArray()

这给了我 4 个数组。不过,它显然没有给我一个客户对象。我试过 jack 森。
val array = parse[List[Customer]](customers)

但我明白了。
GenericSignatureFormatError occured : null

我只是想找到一种简单的方法,就像我在 Java 中所做的那样。

这是我的 Scala 课。
    case class Customer(
id : Pk[ Int ],
name : String,
address : Option[ String ],
city : Option[ String ],
state : Option[ String ],
user_id : Int )

object Customer extends Magic[ Customer ]( Option( "Customer" ) ) {

def apply( name : String, address : String, city : String, state : String, user_id : Int ) = {
new Customer( NotAssigned, name, Some( address ), Some( city ), Some( state ), user_id )
}

def delete( id : Int ) = {
SQL( "DELETE from Customer where id = {id}" ).onParams( id ).executeUpdate()
}

}

谢谢你的帮助。

最佳答案

使用 gson,您可以编写自己的 json 阅读器:

case class Customer(id: Int, name: String, address: Option[String], 
city: Option[String], state: Option[String], user_id: Int)

object CustomerJsonReader {

def read(in: Reader) = readCustomers(new JsonReader(in))

def readCustomers(reader: JsonReader) = {
val customers = new ListBuffer[Customer]
reader.beginArray()
while (reader.hasNext()) {
customers += readCustomer(reader)
}
reader.endArray()
customers toList
}

def readCustomer(reader: JsonReader): Customer = {
var id = 0
var customerName = ""
var address: Option[String] = None
var city: Option[String] = None
var state: Option[String] = None
var userId = 0

reader.beginObject()
while (reader.hasNext()) {
val name = reader.nextName()
name match {
case "id" => id = reader.nextInt()
case "address" => address = Some(reader.nextString())
case "state" => state = Some(reader.nextString())
case "user_id" => userId = reader.nextInt()
case "name" => customerName = reader.nextString()
case "city" => city = Some(reader.nextString())
case _ => reader.skipValue()
}
}
reader.endObject()
Customer(id, customerName, address, city, state, userId)
}

}

val json =
"""
[{"name":"Cool","city":"College Park","address":"806","id":1},
{"name":"Mars ","city":"Durham","address":"12","id":2},
{"name":"Something","city":"Raleigh ","address":"","id":3},
{"name":"test","city":"","address":"","id":5}]
"""

val customers: List[Customer] =
CustomerJsonReader.read(new StringReader(json))

关于json - 将 Json 数组反序列化为 Scala 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7966819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com