首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >去掉javax.json.Json生成的json中的反斜杠

去掉javax.json.Json生成的json中的反斜杠
EN

Stack Overflow用户
提问于 2015-07-18 19:02:41
回答 1查看 1K关注 0票数 0

我使用javax.json和Google库在Scala程序中生成了一个Json。

但是,到目前为止,我所完成的任务(问题JSON)存在问题:

  • 我不需要反斜杠。
  • equivalent_comps元素(数组)的格式不正确。

问题JSON:

代码语言:javascript
复制
   {
    "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\"}"
          ]
        }
     ]
   }

我想要做的是:

代码语言:javascript
复制
{
"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. String.replaceAll single backslashes with double backslashes
  2. String replace a Backslash
  3. " in regex to actually replace "\"?
  4. http://www.xyzws.com/javafaq/how-many-backslashes/198

步骤1:导入所需的库

代码语言:javascript
复制
import javax.json.{JsonValue, Json}
import com.google.gson.{GsonBuilder, JsonParser}

StringWriter步骤2:创建一个

代码语言:javascript
复制
var writer = new StringWriter()

步骤3:创建生成器

代码语言:javascript
复制
val generator = Json.createGenerator(writer)

步骤4:创建我希望最终转换为JSON的初始列表,

代码语言:javascript
复制
val componentList = List((SNumber,636-74-1234), (AENumber,843497127459638), (VNumber,5111111111111111))

步骤5:遍历componentList List 并创建List of JSONObjects

代码语言:javascript
复制
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的输出结果如下:

代码语言:javascript
复制
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 转换为字符串

代码语言:javascript
复制
val componentListAsJsonString = componentListAsJsonObjectList.mkString
println("componentListAsJsonString is: " + componentListAsJsonString)

componentListAsJsonString打印出:

代码语言:javascript
复制
{"comp_type" : "SNumber", "comp_name" : "636-74-1234"}{"comp_type" : "AENumber", "comp_name" : "843497127459638"}{"comp_type" : "VNumber", "comp_name" : "5111111111111111"}

componentListAsJsonString步骤7:调用生成器上的方法,使用创建所需的JSON

代码语言:javascript
复制
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:关闭生成器

代码语言:javascript
复制
generator.close()

JSON步骤9:使用gson的JsonParser美化JSON

代码语言:javascript
复制
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格式进行比较

代码语言:javascript
复制
println("\nPretty JSON Result:\n" + prettyJson)

这就引出了Json在我问题开始时的问题。

最后,我创建了我一直想要的Json。但是它里面有所有的反斜杠。

步骤11:我验证了JSON

它被证实是有效的Json,尽管它不是我想要的。

对于修复此JSON所需的任何建议或帮助,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-18 20:04:01

你一定要去javax.json吗?对于json,有很多scala库没有这样的副作用。例如:

代码语言:javascript
复制
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)))

和结果:

代码语言:javascript
复制
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"
    } ]
  } ]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31494566

复制
相关文章

相似问题

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