【问题标题】:How to extract json from a jsonp string in Scala如何从Scala中的jsonp字符串中提取json
【发布时间】:2014-10-04 11:47:36
【问题描述】:

我使用的是 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 哈希的最佳方法是什么?

【问题讨论】:

  • 添加了正则表达式的更新

标签: json string scala parsing jsonp


【解决方案1】:

这取决于您的响应正文是什么数据类型,以及您希望对格式更改的稳健程度(无换行符、文本更改“_SS_MainSolrCallbackH”、您发布的文本周围有额外的行)。

假设您的响应正文是字符串类型,并且您的正文周围的环绕文本将始终看起来像已发布,就像删除第一行和最后一行一样简单:

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>

如果您需要更复杂的解决方案,请在您的问题中提供更多详细信息。

【讨论】:

    【解决方案2】:

    输入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: {... } 
      }
    "
    

    【讨论】:

      猜你喜欢
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 2013-10-13
      • 2019-02-09
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多