我使用javax.json和Google库在Scala程序中生成了一个Json。
但是,到目前为止,我所完成的任务(问题JSON)存在问题:
equivalent_comps元素(数组)的格式不正确。问题JSON:
{
"outcomes": [
{
"some_line": "Hampton Court",
"some_name": "Divya Katdare",
"equivalent_comps": [
"{\"comp_type\" : \"SNumber\", \"comp_name\" : \"636-74-1234\"} {\"comp_type\" : \"AENumber\", \"comp_name\" : \"843497127459638\"}{\"comp_type\" : \"VNumber\", \"comp_name\" : \"5111111111111111\"}"
]
}
]
}我想要做的是:
{
"outcomes": [
{
"some_line": "Hampton Court",
"some_name": "Divya Katdare",
"equivalent_comps": [
{
"comp_type" : "SNumber",
"comp_name" : "636-74-1234"
},
{
"comp_type" : "AENumber",
"comp_name" : "843497127459638"
},
{
"comp_type" : "VNumber",
"comp_name" : "5111111111111111"
}
]
}
]
}以下是我为完成任务所采取的步骤:
步骤0:在StackOverflow和Google.上查找类似的问题
在我写这篇文章之前,我查阅了资源并做了我的研究。然而,在经历了所有的研究、试验和错误之后,我还是失败了:
步骤1:导入所需的库
import javax.json.{JsonValue, Json}
import com.google.gson.{GsonBuilder, JsonParser}StringWriter步骤2:创建一个
var writer = new StringWriter()步骤3:创建生成器
val generator = Json.createGenerator(writer)步骤4:创建我希望最终转换为JSON的初始列表,
val componentList = List((SNumber,636-74-1234), (AENumber,843497127459638), (VNumber,5111111111111111))步骤5:遍历componentList List 并创建List of JSONObjects
val componentListAsJsonObjectList =
for(component <- componentList)
yield (scala.util.parsing.json.JSONObject(
Map("comp_type" -> component._1,"comp_name" -> component._2)
))
println("componentListAsJsonObjectList is: " + componentListAsJsonObjectList)以上println的输出结果如下:
List({"comp_type" : "SNumber", "comp_name" : "636-74-1234"}, {"comp_type" : "AENumber", "comp_name" : "843497127459638"}, {"comp_type" : "VNumber", "comp_name" : "5111111111111111"})List步骤6:将 of JSONObjects 转换为字符串
val componentListAsJsonString = componentListAsJsonObjectList.mkString
println("componentListAsJsonString is: " + componentListAsJsonString)componentListAsJsonString打印出:
{"comp_type" : "SNumber", "comp_name" : "636-74-1234"}{"comp_type" : "AENumber", "comp_name" : "843497127459638"}{"comp_type" : "VNumber", "comp_name" : "5111111111111111"}componentListAsJsonString步骤7:调用生成器上的方法,使用创建所需的JSON
generator
.writeStartObject()
.writeStartArray("outcomes")
.writeStartObject()
.write("spme_line", "I am fine")
.write("some_name", "Divya Katdare")
.writeStartArray("equivalent_comps")
.write(componentListAsJsonString)
.writeEnd()
.writeEnd()
.writeEnd()
.writeEnd()步骤8:关闭生成器
generator.close()JSON步骤9:使用gson的JsonParser美化JSON
val prettyJson = makeJsonPretty(writer.toString.trim)
def makeJsonPretty(generatedJson: String): String = {
val parser = new JsonParser()
val json = parser.parse(generatedJson).getAsJsonObject
val prettyGson = new GsonBuilder().setPrettyPrinting().create()
val prettyJson = prettyGson.toJson(json)
prettyJson
}步骤10:检查创建的JSON并将其与所需的JSON格式进行比较
println("\nPretty JSON Result:\n" + prettyJson)这就引出了Json在我问题开始时的问题。
最后,我创建了我一直想要的Json。但是它里面有所有的反斜杠。
步骤11:我验证了JSON
它被证实是有效的Json,尽管它不是我想要的。
对于修复此JSON所需的任何建议或帮助,我们将不胜感激。
发布于 2015-07-18 20:04:01
你一定要去javax.json吗?对于json,有很多scala库没有这样的副作用。例如:
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.Serialization.write
implicit val format = DefaultFormats
case class Comp(comp_type: String, comp_name: String)
case class Outcome(some_line: String, some_name: String, equivalent_comps: List[Comp])
case class A(outcomes: List[Outcome])
val componentList = List(
Comp("SNumber","636-74-1234"),
Comp("AENumber","843497127459638"),
Comp("VNumber","5111111111111111")
)
val oc = Outcome("Hampton Court", "Divya Katdare", componentList)
val a = A(List(oc))
pretty(parse(write(a)))和结果:
res0: String = {
"outcomes" : [ {
"some_line" : "Hampton Court",
"some_name" : "Divya Katdare",
"equivalent_comps" : [ {
"comp_type" : "SNumber",
"comp_name" : "636-74-1234"
}, {
"comp_type" : "AENumber",
"comp_name" : "843497127459638"
}, {
"comp_type" : "VNumber",
"comp_name" : "5111111111111111"
} ]
} ]
}https://stackoverflow.com/questions/31494566
复制相似问题