我有来自两个不同API端点的JSON数据。第一个JSON包含有关商店的数据,第二个JSON包含有关交易(销售)的数据。
对于每个商店ID,我都会获得一系列交易并将其解析为JsValue
。因此,我有一个store
Jsvalue代表该商店,一个transactions
JsValue代表商店的交易数组。然后我将JsValues字符串化:
(Json.stringify(storeJsValue), Json.stringify(transactionsJson))
上述Array [(String,String)]的字符串化JsValues的打印结果:
({"store_id":"01","name":"Store_1"}, [{"saleId": 12, "name": "New name1", "saleType": "New Type1"]}, {"saleId": 222, "name": "Some name1", "saleType": "SomeType5"})
({"store_id":"02","name":"Store_2"}, [{"saleId": 123, "name": "New name2", "saleType": "New Type2"}])
({"store_id":"03","name":"Store_3"}, [{"saleId": 1234, "name": "New name3", "saleType": "New Type3"}, {"saleId": 333, "name": "Some name3", "saleType": "SomeType3"}])
最后,我想生成一个结果字符串,以便商店数据包装其交易数据,如下所示:
"{store:\"storeJson\",transactions:\"+ transactionsJson + "}"
使用Play Json实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
一种方法是将json转换为对象,创建一个具有“ store”和“ transactions”属性的新对象,然后再次将其转换为JSON。
这样,您将得到:
{
"store": {
"store_id":"01",
"name":"Store_1"
},
"transactions": [
{
"saleId": 12,
"name": "New name1",
"saleType": "New Type1"
},
{
"saleId": 222,
"name": "Some name1",
"saleType": "SomeType5"
}
]
}
您的课程:
case class MyClass( store : Store, transactions : Array[Sales]) {
.....
}
答案 1 :(得分:2)
您有两个json值,可以使用它们创建一个新对象:
The Ionic CLI will exit. Please check any output above for error details.
答案 2 :(得分:1)
我设法达到了预期的效果。
val store = Json.stringify(storeJsValue)
val transactions = Json.stringify(transactionsJsValue)
val storeWithTransactions: String = s"{store: $store , transactions: $transactions}"
这样,我就得到了一个包含商店及其所有交易数据的字符串。因此,我只是遍历商店,对于每个商店,Id都会从另一个端点获取其交易。然后将store
和transactions
的字符串化JsValue串联起来,将所得的字符串收集到Array [String]中。
答案 3 :(得分:1)
在Play中,您可以使用Json Reads/Writes
助手将case class
转换为Json
,反之亦然。因此,对于您的示例:
case class Store(store_id: String, name: String)
然后,如果您有一个Json并想将其转换为Store
案例类,则需要一个“阅读器”:
val storeReads: Reads[Store] = Json.reads[Store]
此后,您可以将Json的内容读取为String并将其转换为case类(假设storeJson
是包含Json内容的val):
val toStoreCaseClass: JsResult[Store] = Json.fromJson[Store](json.parse(storeJson))
如果要将案例类转换为Json,则可以使用写操作:
val storeWrites: OWrites[Store] = Json.writes[Store]
现在假设您拥有类型storeInstance
的val Store
,可通过以下代码将其转换为Json:
Json.toJson(storeInstance)
您可以对交易执行相同的操作。
好了,现在有了案例类,您可以使用常用的collections命令(例如map
,filter
等)将它们变形为所需的格式。您甚至可以拥有一个更通用的案例类,其中包含要实现的格式(具有读/写功能);并进行数据操作,最后将它们转换为Json。