【问题标题】:Complex string parsing issues复杂的字符串解析问题
【发布时间】:2012-05-17 05:32:20
【问题描述】:

我有以下 PHP 字符串:

"{'blah':1178,'blah':0,'blah':260,'blah':0,'needWrapper':

{'NEED':'TEXTNEED','NEED':'TEXTNEED'},'blah':'blah'}"

编辑:我将其分解以希望使其更具可读性

我需要从中获取“NEED: TEXTNEED”和“NEED: TEXTNEED”子字符串。我觉得有一个很好的方法可以使用正则表达式或使用爆炸或其他东西,但我不能完全拼凑出一个优雅/有效的解决方案。任何帮助将不胜感激。

【问题讨论】:

  • NEEDs 是同一个字符串吗?否则,这是完美的 JSON。 (好吧,也许除了引号 - jdi 就在那里)
  • 这看起来像一个 JSON 字符串。您正在使用哪种编程语言/脚本?可能您可以使用与您的语言兼容的 JSON api 之一来解析上述内容。
  • 这是一个 PHP 字符串,我如何在 PHP 中将它与 JSON 解析一起使用??
  • 实际上,当我尝试对它进行 JSON_decode 时,它​​返回了“NULL”......这肯定有问题。有人知道吗?

标签: regex string parsing


【解决方案1】:

如果把单引号换成双引号,可以用json解析:

import json

s = "{'blah':1178,'blah':0,'blah':260,'blah':0,'needWrapper':{'NEED':'TEXTNEED','NEED':'TEXTNEED'}, 'blah':'blah'}"

print json.loads(s.replace("'", '"'))
# {u'blah': u'blah', u'needWrapper': {u'NEED': u'TEXTNEED'}}

现在您可以访问对象了。

如果源来自 php,它应该能够生成带有双引号对象的有效 JSON: http://www.php.net/manual/en/function.json-encode.php

【讨论】:

  • 当然,如果字符串中有未转义的双引号,这将非常失败:{'a':'"Hello"'}。如果两个键相同(结果只有一个),它也不应该工作,尽管这可能是 OP 的一个糟糕的例子。
  • @Kobi:这一定是一个糟糕的例子,因为没有理由重复键。这是 OP 的一个极其有限的例子,所以我所能做的就是解决他提供的问题。
  • 是的,键不一样。对不起。
  • @Kobi:另外,JSON 字符串中的单引号无效(不传递 json lint),所以我认为 python 方面尝试处理这些案例的责任较少,还有更多在源上生成有效的 JSON。
  • 所以我实际上是在尝试在这个字符串上调用 json_decode:{"playerId":1178,"percentChange":0.1,"averageDraftPosition":260,"percentOwned":0.1,"mostRecentNews": {“新闻”:“印第安人官方推特报道称,阿卡多周一从哥伦布被召来。”,“旋转”:“他将在 13 场比赛中以 2.76 的 ERA 取代丹·惠勒的现役名单。快船赛季开始。","date":"Mon May 14"},"fullName":"Jeremy Accardo"} 但是当我这样做时,它仍然返回 null。没有单引号了,我还缺少什么吗?
猜你喜欢
  • 2016-06-20
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多