首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建新的AnyRef?

如何创建新的AnyRef?
EN

Stack Overflow用户
提问于 2015-04-13 23:31:55
回答 1查看 824关注 0票数 1

我有一个JSON对象,其中一部分是映射到AnyRef的,因为它可能包含变量键/值对。我把那部分当作垃圾抽屉。但是我必须在这个AnyRef对象中添加"id“和随机密钥。我怎么能这么做?

我尝试过这样做,但是映射是存储的,生成的JSON看起来不太正确。

以下是我的例子:

代码语言:javascript
运行
复制
val map1 = requestStateChange.cloudModel.asInstanceOf[Option[Map[String, AnyRef]]]
val newModel = List(("id", java.util.UUID.randomUUID().toString)).toMap[String, AnyRef] ++ map1.get

我真正想要的是这样的东西:

代码语言:javascript
运行
复制
{   
  "model": {
    "id": "c9725317-e2e5-43e8-876e-5ab6a16b951d"
    "version": "v1",
    "location": "...",
    "type": "...",
    "data": {
        "id": "9520146"
    }
  }
}

感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-13 23:59:34

别在这里重新发明轮子。作为经验法则,惯用Scala在可能的情况下避免使用像Any这样的类型。有很多库可以让您轻松地处理JSON。您可以考虑玩JSON。如果您正在使用该库,您可以这样做:

代码语言:javascript
运行
复制
val myJsonString = """{ "foo" : "bar" }"""
val map = Json.parse(myJsonString).as[JsObject]
val newMap = map + ("id" -> JsNumber(123)) //Adding a new property is easy now
Json.stringify(newMap) // {"foo":"bar","id":123}, as desired

您可以阅读更多关于Play JSON 这里的内容。您可以阅读有关使用JSON 这里的其他替代方案。

如果确实需要实例化AnyRef,则可以将任何类型分配给AnyRef,但基本值类型除外:

代码语言:javascript
运行
复制
Map(1 -> "a") : AnyRef

您可以考虑使用Any而不是AnyRef,后者甚至更通用,并且还允许您使用基本的值类型,例如1 : Any。您可以更多地了解AnyAnyRefAnyVal 这里之间的关系。以您为例,您可以这样做:

代码语言:javascript
运行
复制
val map1 : Map[String, Any] = Map("model" -> Map("version" -> "v1"))
val model = map1("model").asInstanceOf[Map[String, Any]]
val newModel = model.updated("id", 123)
val newMap = map1.updated("model", newModel)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29616750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档