【问题标题】:ValueError: Invalid \escape: error while doing json.loads()ValueError: Invalid \escape: 执行 json.loads() 时出错
【发布时间】:2018-06-12 20:40:04
【问题描述】:

我正在抓取一个网站,它有这个 JSON 数据作为回报。

https://pastebin.com/R50eTqrD 这是print( repr( string ) ) 的输出 https://pastebin.com/VH6JrDMG这是print( string )的输出

我在做

resp = json.loads(resp)

但它给了我这个错误

ValueError: Invalid \escape: line 1 column 170 (char 169)

我找到了一个解决方案here,它建议我这样做

resp = json.loads(HTMLParser().unescape(resp.decode('unicode-escape')))

但它现在抛出这个错误

UnicodeEncodeError: 'ascii' codec can't encode characters in position 51-59: ordinal not in range(128)

我已经尝试了几种解决方案,例如

json.loads(HTMLParser().unescape(resp.decode('unicode-escape')).encode("utf-8"))

还有更多,但没有一个对我有用。

【问题讨论】:

  • @user2864740 好的,感谢您的指出,但无效的 json 错误应该有所不同...我的主要目标是解决此错误ValueError: Invalid \escape: ...知道该怎么做
  • 来自服务器的 raw JSON 是什么? (即,根据浏览器网络捕获?)
  • @user2864740 Tomáš Linhart 的回答对我有用
  • 这个问题肯定没有minimal reproducible example

标签: python python-2.7 scrapy


【解决方案1】:

字符串中的\x3E 字符有问题。如果s 持有字符串,试试这个:

json.loads(s.replace(r'\x3E', '\x3E'))

【讨论】:

  • \x3E 有什么“问题”? - 如果与消歧相关,请提供代码点值/转义。
  • Ohh raw string vs normal.. 明白了.. JSON源编码为\x3E(无效/损坏)而不是\u003E(有效JSON编码)..我想知道它是否可能将来返回\xZZ 以获取 ZZ 的其他值。
  • 你能在答案中添加一点解释吗?
  • @Umair JSON 解析器给出了它遇到错误的确切位置 - char 169。我查看了字符串的那部分并看到了那些字符。 JSON 可能无法取消转义,因此我将转义序列替换为实际字符。
猜你喜欢
  • 2021-08-18
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 2012-03-06
  • 2018-10-18
相关资源
最近更新 更多