繁体   English   中英

如何从Scala中的jsonp字符串中提取json

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM