[英]How to extract json from a jsonp string in Scala
我正在使用Scala语言,并且有这样一个响应正文:
_SS_MainSolrCallbackH(
{
response: {
numFound: 1,
start: 0,
maxScore: 4.9338827,
docs: [
{
tipo: "M",
id: "mus1933196",
s: 4.9338827,
u: "daniellaalcarpe",
d: "lagrima-de-amor",
dd: "",
f: "202114_20130510215437.jpg",
a: "Daniella Alcarpe",
t: "Lágrima De Amor",
g: "MPB"
}
]
},
highlighting: {
mus1933196: {
titulo: [
"Lágrima <b>De</b> <b>Amor</b>"
]
}
}
}
)
如果我尝试将其解析为json,它将失败,因为它实际上不是json。 删除字符串的_SS_MainSolrCallbackH( )
部分,仅保留json哈希的最佳方法是什么?
这取决于您的响应主体是哪种数据类型,以及您要对格式更改(不存在换行符,文本“ _SS_MainSolrCallbackH”的更改,所发布文本周围的多余行)的鲁棒性。
假设您的响应主体为String类型,并且主体周围的换行文字将始终显示为已发布,就像删除第一行和最后一行一样简单:
scala> val body = "_SS_MainSolrCallbackH(\n<some JSON>\n)"
body: String =
_SS_MainSolrCallbackH(
<some JSON>
)
scala> val jsonStr = body.lines.toList.tail.init.mkString
jsonStr: String = <some JSON>
如果您需要更复杂的解决方案,请在问题中提供更多详细信息。
输入str: String
一种简单方法str: String
包括,
str.stripPrefix("_SS_MainSolrCallbackH(").stripSuffix(")")
去除填充物。 为了提高可用性,请考虑例如
def stripPadding(str: String, padding: String) =
str.stripPrefix(padding+"(").stripSuffix(")")
更新
使用正则表达式,尝试
val re = """(?s)_SS_MainSolrCallbackH\((.*)\)""".r
re: scala.util.matching.Regex = (?s)_SS_MainSolrCallbackH\((.*)\)
scala> val re(x) = a
x: String =
"
{
response: {... }
}
"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.